CBaseServerMtm Class Reference

class CBaseServerMtm : public CActive

Base class for Server-side MTM components. Server-side MTMs provide all message transport functionality for a particular messaging protocol.

MTM implementers implement a derived class to provide such functionality for their message protocol. Writers of message client applications are never concerned with this class and its sub-classes, as these are only accessed by the Message Server.

Each MTM interprets the generic commands in different ways. For example, a Fax MTM would transmit a fax when asked to copy a fax from a local folder to a fax service. For the same function, an IMAP MTM would create a copy of the message on the remote server and update the message index to show the copy of the message on the remote server. An important initial design task is to the map the functions to the functionality provided by the protocol.

Server-side MTM functions are called by the Message Server as a result of a client request that requires some remote operation with the MTM's protocol. The following steps give a simplified view of the usual sequence of events:

1. the Message Server instantiates a Server-side MTM object through the factory function

2. the Message Server calls the appropriate asynchronous function on the Server-side MTM interface, passing a TRequestStatus argument

3. the Server-side MTM function typically starts whatever asynchronous communications it requires and returns

4. the Server-side MTM is signalled when the asynchronous communications complete, and handles the result

5. the Server-side MTM signals the Message Server, through the TRequestStatus passed earlier

6. the Message Server deletes the Server-side MTM object

To qualify this somewhat:

1. it is up to the Server-side MTM implementation to decide how to translate data back and forth between the formats used by Message Server (index entry, message store, binary files), and that required by the protocol; this is another important design task

2. depending on the protocol being used, the communications sequence can be of considerable complexity; typically it requires division into a number of asynchronous steps

3. for greater efficiency where further commands are shortly expected, deletion of the Server-side MTM object can be prevented

For asynchronous requests, a Server-side MTM should always complete the TRequestStatus with KErrNone. Any errors should be returned in the progress information.

Note the following significant groups of functions:

1. Copy and move from remote functions: CopyToLocalL() and MoveToLocalL() are called by the Message Server to get a selection of entries from a remote location. For many protocols, this should be interpreted as message retrieval. For protocols where messages exist on a remote server, this function is typically used to download specific messages, after an initial connection has downloaded message headers.

2. Copy and move to remote functions: CopyFromLocalL() and MoveFromLocalL() are called by the Message Server to copy/move a selection of entries to a remote location. For many protocols, this should be interpreted as message sending.

3. Copy and move within remote functions: CopyWithinServiceL() and MoveWithinServiceL() are called by the Message Server to copy a selection of entries within a remote service. An example of their use might be for a user rearranging messages within remote folders.

Inherits from

Public Member Functions
~CBaseServerMtm()
voidChangeL(TMsvEntry, TRequestStatus &)
TBool CommandExpected()
voidCopyFromLocalL(const CMsvEntrySelection &, TMsvId, TRequestStatus &)
voidCopyToLocalL(const CMsvEntrySelection &, TMsvId, TRequestStatus &)
voidCopyWithinServiceL(const CMsvEntrySelection &, TMsvId, TRequestStatus &)
voidCreateL(TMsvEntry, TRequestStatus &)
voidDeleteAllL(const CMsvEntrySelection &, TRequestStatus &)
TInt GetNonOperationMtmData(TNonOperationMtmDataType &, TPtrC8 &)
voidMoveFromLocalL(const CMsvEntrySelection &, TMsvId, TRequestStatus &)
voidMoveToLocalL(const CMsvEntrySelection &, TMsvId, TRequestStatus &)
voidMoveWithinServiceL(const CMsvEntrySelection &, TMsvId, TRequestStatus &)
const TDesC8 &Progress()
voidStartCommandL(CMsvEntrySelection &, TInt, const TDesC8 &, TRequestStatus &)
IMPORT_C TIntSystemProgress(TMsvSystemProgress &)
Protected Member Functions
CBaseServerMtm(CRegisteredMtmDll &, CMsvServerEntry *)
voidDoComplete(TInt)
voidDoRunL()
IMPORT_C TIntExtension_(TUint, TAny *&, TAny *)
IMPORT_C TAny *GetInterface(TUid)
Private Member Functions
IMPORT_C TIntRunError(TInt)
IMPORT_C voidRunL()
Inherited Functions
CActive::CActive(TInt)
CActive::Cancel()
CActive::Deque()
CActive::DoCancel()
CActive::IsActive()const
CActive::IsAdded()const
CActive::Priority()const
CActive::SetActive()
CActive::SetPriority(TInt)
CActive::~CActive()
CBase::CBase()
CBase::Delete(CBase *)
CBase::operator new(TUint)
CBase::operator new(TUint,TAny *)
CBase::operator new(TUint,TLeave)
CBase::operator new(TUint,TLeave,TUint)
CBase::operator new(TUint,TUint)
CBase::~CBase()
Inherited Enumerations
CActive:TPriority
Protected Attributes
CMsvServerEntry *iServerEntry
Private Attributes
TAny *iExtensionData
CRegisteredMtmDll &iRegisteredMtmDll
Inherited Attributes
CActive::iStatus

Constructor & Destructor Documentation

CBaseServerMtm(CRegisteredMtmDll &, CMsvServerEntry *)

IMPORT_CCBaseServerMtm(CRegisteredMtmDll &aRegisteredMtmDll,
CMsvServerEntry *aServerEntry
)[protected]

Parameters

CRegisteredMtmDll & aRegisteredMtmDll
CMsvServerEntry * aServerEntry

~CBaseServerMtm()

IMPORT_C~CBaseServerMtm()

Member Functions Documentation

ChangeL(TMsvEntry, TRequestStatus &)

voidChangeL(TMsvEntryaNewEntry,
TRequestStatus &aStatus
)[pure virtual]

Updates a remote entry with relevant data when called by the Message Server.

Implementations should provide this function if the messaging protocol supports updating of remote entries. If this is not supported, implementations should leave with KErrNotSupported.

The Server-side MTM implementation must decide what information in the TMsvEntry is relevant to the remote entry, and translate it appropriately for the specific protocol. Most of the data contained in the TMsvEntry is specific to the Symbian OS Message Server, and would probably have no direct correlation with the protocol's own storage format. Some entry data may however be useful. For example, if the protocol supports remote renaming of folders, the implementation could:

1. check for a folder type entry

2. extract the folder name from aNewEntry.iDetails

3. check if the folder name has changed by comparing the new name with iDetails in the index entry currently; if not, complete with KErrNone

4. initiate a protocol-specific action to rename the remote folder

The implementation should also always update the local Message Server index through CMsvServerEntry::ChangeL().

leave

KErrNotSupported The Server-side MTM does not support this operation

leave

Other leave codes Dependent on implementation

Parameters

TMsvEntry aNewEntryData by which to update entry
TRequestStatus & aStatusAsynchronous completion word for the operation.

CommandExpected()

TBool CommandExpected()[pure virtual]

Tests if the Server-side MTM object should be deleted when called by the Message Server

It is useful to stop the MTM being deleted when more commands are expected shortly. This would be the case, for example, after receiving a command to go online.

If there are no more commands expected by the Server-side MTM object, then the function should return EFalse, and the Message Server will delete it.

ETrue: the MTM object should not be deleted EFalse: the MTM object can be deleted

CopyFromLocalL(const CMsvEntrySelection &, TMsvId, TRequestStatus &)

voidCopyFromLocalL(const CMsvEntrySelection &aSelection,
TMsvIdaDestination,
TRequestStatus &aStatus
)[pure virtual]

Copies a selection of entries from a local location to a remote location.

Requirements:

Implementations should provide this function if the messaging protocol supports retrieval of remote entries. If this is not supported, implementations should leave with KErrNotSupported.

Implementations of this function have three fundamental steps:

1. reading entry data

2. converting entry data from the Message Server format into that required by the protocol

3. doing the transfer operation using the appropriate communications protocols

leave

KErrNotSupported The Server-side MTM does not support this operation

leave

Other leave codes Dependent on implementation

Parameters

const CMsvEntrySelection & aSelectionThe collection of message index entries for which the copy is required
TMsvId aDestinationThe entry ID of the service by which the entries should be transferred
TRequestStatus & aStatusAsynchronous completion word for the operation

CopyToLocalL(const CMsvEntrySelection &, TMsvId, TRequestStatus &)

voidCopyToLocalL(const CMsvEntrySelection &aSelection,
TMsvIdaDestination,
TRequestStatus &aStatus
)[pure virtual]

Copies a selection of entries from a remote location to a local location. This will only be meaningful for some protocols.

Requirements:

Implementations should provide this function if the messaging protocol supports retrieval of remote entries. If this is not supported, implementations should leave with KErrNotSupported.

Implementations of this function have three fundamental steps:

1. doing the transfer operation using the appropriate communications protocols

2. converting protocol-specific data into the three-part storage format (index entry, message store, binary files) required by the Message Server

3. updating entries in the Message Server

leave

KErrNotSupported The Server-side MTM does not support this operation

leave

Other leave codes Dependent on implementation

Parameters

const CMsvEntrySelection & aSelectionThe collection of message index entries for which the copy/moving is required.
TMsvId aDestinationThe entry ID to which the selection is to be copied
TRequestStatus & aStatusAsynchronous completion word for the operation

CopyWithinServiceL(const CMsvEntrySelection &, TMsvId, TRequestStatus &)

voidCopyWithinServiceL(const CMsvEntrySelection &aSelection,
TMsvIdaDestination,
TRequestStatus &aStatus
)[pure virtual]

Copies a selection of entries within a remote location.

Requirements:

Implementations should provide this function if the messaging protocol supports the ability to copy entries within a remote service. If this is not supported, implementations should leave with KErrNotSupported.

leave

KErrNotSupported The Server-side MTM does not support this operation

leave

Other leave codes Dependent on implementation

Parameters

const CMsvEntrySelection & aSelectionThe collection of message index entries for which the copy is required
TMsvId aDestinationThe server entry ID to which the selection is to be copied
TRequestStatus & aStatusAsynchronous completion word for the operation

CreateL(TMsvEntry, TRequestStatus &)

voidCreateL(TMsvEntryaNewEntry,
TRequestStatus &aStatus
)[pure virtual]

Creates a new remote entry with relevant data when called by the Message Server.

Implementations should provide this function if the messaging protocol supports creation of remote entries. If this is not supported, implementations should leave with KErrNotSupported.

As with ChangeL(), the Server-side MTM implementation must decide what information in the TMsvEntry is relevant to the remote entry, and translate it appropriately for the specific protocol. Most of the data contained in the TMsvEntry is specific to the Message Server, and would probably have no direct correlation with the protocol's own storage format. For example, for a folder, probably only the name and parent are needed, so if the protocol supports creation of remote folders, the implementation could:

1. check for a folder type entry

2. get the folder name and parent details from aNewEntry

3. initiate a protocol-specific action to create the remote folder

leave

KErrNotSupported The Server-side MTM does not support this operation

leave

Other leave codes Dependent on implementation

Parameters

TMsvEntry aNewEntryData by which to create entry
TRequestStatus & aStatusAsynchronous completion word for the operation.

DeleteAllL(const CMsvEntrySelection &, TRequestStatus &)

voidDeleteAllL(const CMsvEntrySelection &aSelection,
TRequestStatus &aStatus
)[pure virtual]

Deletes each entry in the supplied selection when called by the message Server. If any of the entries in the selection is a parent entry, then all its children should also be deleted, recursively to the bottom of the ownership tree.

Implementations should provide this function if the messaging protocol supports deletion of remote entries. If this is not supported, implementations should leave with KErrNotSupported.

leave

KErrNotSupported The Server-side MTM does not support this operation

leave

Other leave codes Dependent on implementation

Parameters

const CMsvEntrySelection & aSelectionThe collection of entries that are to be deleted.
TRequestStatus & aStatusAsynchronous completion object.

DoComplete(TInt)

voidDoComplete(TIntaError)[protected, pure virtual]

Called by the base class RunL() if DoRunL() leaves.

It should be implemented to handle this error. For example, progress information could be updated to reflect the problem.

Parameters

TInt aErrorThe leave code given by DoRunL().

DoRunL()

voidDoRunL()[protected, pure virtual]

Handles the completion of any asynchronous requests that it makes. It is called from the base class RunL() .

Note that any leaves made by this function result in DoComplete() being called with the leave code.

Extension_(TUint, TAny *&, TAny *)

IMPORT_C TIntExtension_(TUintaExtensionId,
TAny *&a0,
TAny *a1
)[protected, virtual]

Parameters

TUint aExtensionId
TAny *& a0
TAny * a1

GetInterface(TUid)

IMPORT_C TAny *GetInterface(TUidaUid)[protected, virtual]

Parameters

TUid aUid

GetNonOperationMtmData(TNonOperationMtmDataType &, TPtrC8 &)

TInt GetNonOperationMtmData(TNonOperationMtmDataType &aMtmDataType,
TPtrC8 &aResultBuffer
)

Parameters

TNonOperationMtmDataType & aMtmDataType
TPtrC8 & aResultBuffer

MoveFromLocalL(const CMsvEntrySelection &, TMsvId, TRequestStatus &)

voidMoveFromLocalL(const CMsvEntrySelection &aSelection,
TMsvIdaDestination,
TRequestStatus &aStatus
)[pure virtual]

Moves a selection of entries from a local location to a remote location.

Requirements:

Implementations should provide this function if the messaging protocol supports retrieval of remote entries. If this is not supported, implementations should leave with KErrNotSupported.

Implementations of this function have three fundamental steps:

1. reading entry data

2. converting entry data from the Message Server format into that required by the protocol

3. doing the transfer operation using the appropriate communications protocols

The implementation of MoveFromLocalL() should differ from CopyFromLocalL() in additionally deleting the original local data.

leave

KErrNotSupported The Server-side MTM does not support this operation

leave

Other leave codes Dependent on implementation

Parameters

const CMsvEntrySelection & aSelectionThe collection of message index entries for which the move is required
TMsvId aDestinationThe entry ID of the service by which the entries should be transferred
TRequestStatus & aStatusAsynchronous completion word for the operation

MoveToLocalL(const CMsvEntrySelection &, TMsvId, TRequestStatus &)

voidMoveToLocalL(const CMsvEntrySelection &aSelection,
TMsvIdaDestination,
TRequestStatus &aStatus
)[pure virtual]

Moves a selection of entries from a remote location to a local location.

Requirements:

Implementations should provide this function if the messaging protocol supports retrieval of remote entries. If this is not supported, implementations should leave with KErrNotSupported.

Implementations of this function have three fundamental steps:

1. doing the transfer operation using the appropriate communications protocols

2. converting protocol-specific data into the three-part storage format (index entry, message store, binary files) required by the Message Server

3. updating entries in the Message Server

MoveToLocalL() should differ from CopyToLocalL() in additionally deleting the original remote data.

leave

KErrNotSupported The Server-side MTM does not support this operation

leave

Other leave codes Dependent on implementation

Parameters

const CMsvEntrySelection & aSelectionThe collection of message index entries for which the moving is required.
TMsvId aDestinationThe entry ID to which the selection is to be copied/moved
TRequestStatus & aStatusAsynchronous completion word for the operation

MoveWithinServiceL(const CMsvEntrySelection &, TMsvId, TRequestStatus &)

voidMoveWithinServiceL(const CMsvEntrySelection &aSelection,
TMsvIdaDestination,
TRequestStatus &aStatus
)[pure virtual]

Moves a selection of entries within a remote location.

Requirements:

Implementations should provide this function if the messaging protocol supports the ability to move entries within a remote service. If this is not supported, implementations should leave with KErrNotSupported.

The implementation of MoveWithinServiceL() should differ from CopyWithinServiceL() in additionally deleting the original data.

leave

KErrNotSupported The Server-side MTM does not support this operation

leave

Other leave codes Dependent on implementation

Parameters

const CMsvEntrySelection & aSelectionThe collection of message index entries for which the move is required
TMsvId aDestinationThe server entry ID to which the selection is to be moved
TRequestStatus & aStatusAsynchronous completion word for the operation

Progress()

const TDesC8 &Progress()[pure virtual]

This function is called by the Message Server to get progress information for the current asynchronous operation.

The call is made as a response to a client program requesting progress information through CMsvOperation::ProgressL(). The packing format used in the TDesC8 is MTM-specific. Only the implementation of the User Interface MTM progress information functions need to understand the format.

The progress buffer should have a maximum size of 256 bytes.

Progress information on current asynchronous operation

CBaseMtmUi::DisplayProgressSummary()

CBaseMtmUi::GetProgress()

RunError(TInt)

IMPORT_C TIntRunError(TIntaError)[private, virtual]

Parameters

TInt aError

RunL()

IMPORT_C voidRunL()[private, virtual]

Handles an active object's request completion event.

A derived class must provide an implementation to handle the completed request. If appropriate, it may issue another request.

The function is called by the active scheduler when a request completion event occurs, i.e. after the active scheduler's WaitForAnyRequest() function completes.

Before calling this active object's RunL() function, the active scheduler has:

1. decided that this is the highest priority active object with a completed request

2. marked this active object's request as complete (i.e. the request is no longer outstanding)

RunL() runs under a trap harness in the active scheduler. If it leaves, then the active scheduler calls RunError() to handle the leave.

Note that once the active scheduler's Start() function has been called, all user code is run under one of the program's active object's RunL() or RunError() functions.

CActiveScheduler::Start

CActiveScheduler::Error

CActiveScheduler::WaitForAnyRequest

TRAPD

StartCommandL(CMsvEntrySelection &, TInt, const TDesC8 &, TRequestStatus &)

voidStartCommandL(CMsvEntrySelection &aSelection,
TIntaCommand,
const TDesC8 &aParameter,
TRequestStatus &aStatus
)[pure virtual]

Executes an MTM-specific operation on a selection of entries when called by the Message Server.

The call is made as a response to a client program invoking an MTM-specific operation through CBaseMtm::InvokeSyncFunctionL()/InvokeAsyncFunctionL(). The aSelection, aCommand, and aParameter arguments pass the values of the original aSelection, aFunctionId, and aParameter respectively arguments from such a call. The use (if any) of the aSelection and aParameter arguments by the function depends on the command.

Parameters

CMsvEntrySelection & aSelectionA selection of message entries on which the command is to be executed
TInt aCommandThe MTM-specific command to be carried out
const TDesC8 & aParameterCommand-specific parameters
TRequestStatus & aStatusAsynchronous completion word for the operation

SystemProgress(TMsvSystemProgress &)

IMPORT_C TIntSystemProgress(TMsvSystemProgress &aOutSysProg)

Parameters

TMsvSystemProgress & aOutSysProg

Member Data Documentation

TAny * iExtensionData

TAny *iExtensionData[private]

CRegisteredMtmDll & iRegisteredMtmDll

CRegisteredMtmDll &iRegisteredMtmDll[private]

CMsvServerEntry * iServerEntry

CMsvServerEntry *iServerEntry[protected]

The entry on which to operate. It is set in the constructor.

The destructor deletes this member.