mmsengine/mmsserver/inc/mmsserver.h
changeset 0 72b543305e3a
child 26 ebe688cedc25
equal deleted inserted replaced
-1:000000000000 0:72b543305e3a
       
     1 /*
       
     2 * Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  
       
    15 *     Server Mtm
       
    16 *
       
    17 */
       
    18 
       
    19 
       
    20 
       
    21 #ifndef MMSSERVER_H
       
    22 #define MMSSERVER_H
       
    23 
       
    24 //  INCLUDES
       
    25 #include <mtsr.h>
       
    26 #include <msvipc.h>
       
    27 #include <schedulebaseservermtm.h>
       
    28 #include "mmsconst.h"
       
    29 
       
    30 // CONSTANTS
       
    31 // approximate amount of disk space needed for scheduling
       
    32 // will be multiplied by the number of entries to be scheduled
       
    33 const TInt KMmsTaskSpace = 80;
       
    34 // c:\Private\1000484b\mmsvar
       
    35 _LIT( KMmsMessageVariationDirectory, "\x43:\\Private\\1000484B\\mmsvar\\" ); 
       
    36 
       
    37 // MACROS
       
    38 // this definition allows logging of notifications
       
    39 // and received messages.
       
    40 //#define NOTIFICATION_LOGGING
       
    41 
       
    42 // DATA TYPES
       
    43 
       
    44 // FUNCTION PROTOTYPES
       
    45 
       
    46 // FORWARD DECLARATIONS
       
    47 class CMmsServerEntry;
       
    48 class CMmsSettings;
       
    49 class CMmsSendOperation;
       
    50 class CMmsReceiveMessage;
       
    51 class CMmsForwardOperation;
       
    52 class CMmsDeleteOperation;
       
    53 class CMmsMmboxList;
       
    54 class CMmsDecode;
       
    55 class CMmsHeaders;
       
    56 class CLogEvent;
       
    57 class CMmsLog;
       
    58 class RScheduler;
       
    59 class CMmsReadReport;
       
    60 
       
    61 // CLASS DECLARATION
       
    62 
       
    63 /**
       
    64 *  Server Mtm for multimedia messaging subsystem.
       
    65 *  This component will take care of message sending and receiving
       
    66 */
       
    67 class CMmsServerMtm : public CScheduleBaseServerMtm
       
    68     {
       
    69     public:  // Constructors and destructor
       
    70         // constructor is private.
       
    71 
       
    72         /**
       
    73         * Factory function.
       
    74         * The only function exported by this polymorphic interface dll.<br>
       
    75         * This function is called by message server when a client asks for
       
    76         *     some service from this mtm type
       
    77         * @param  aRegisteredMtmDll Reference to Mtm Dll registry class
       
    78         * @param  aInitialEntry Service entry. Can be the first entry in
       
    79         *     CMsvSelection array in the call from the client, or if
       
    80         *     there is no service entry as the first item of the selection,
       
    81         *     this will be the default service entry for this type of mtm.
       
    82         *     If no default entry has been specified, and the first entry
       
    83         *     in the selection is not a service entry, the creation of 
       
    84         *     server mtm will fail. 
       
    85         * @return Pointer to CMmsServerClass. 
       
    86         */
       
    87         IMPORT_C static CMmsServerMtm* NewL(
       
    88             CRegisteredMtmDll& aRegisteredMtmDll,
       
    89             CMsvServerEntry* aInitialEntry );
       
    90 
       
    91         /**
       
    92         * Destructor.
       
    93         */
       
    94         ~CMmsServerMtm();
       
    95 
       
    96     public: // New functions
       
    97         
       
    98     public: // Functions from base classes
       
    99 
       
   100         // Copy and move, these are actually designed for email.
       
   101         // They can be used for other purposes, if seem fit
       
   102 
       
   103         // Miscellaneous copy, move and other entry handling functions
       
   104         // are not supported in increment 1.
       
   105 
       
   106         /**
       
   107         * From CBaseServerMtm: Copy messages from remote service to
       
   108         *     local folders
       
   109         * @param aSelection list of TMsvIds of messages. The first is the service
       
   110         * @param aDestination TMsvId of the destination folder (for example inbox)
       
   111         * @param aStatus the status of the active object that is using this
       
   112         *     function as asynchronous service provider. This status will be
       
   113         *     set as completed when the server mtm active object is done.
       
   114         */
       
   115         void CopyToLocalL(
       
   116             const CMsvEntrySelection& aSelection,
       
   117             TMsvId aDestination,
       
   118             TRequestStatus& aStatus );
       
   119         
       
   120         /**
       
   121         * From CBaseServerMtm: Copy messages from local folder to
       
   122         *     remote service
       
   123         * @param aSelection list of TMsvIds of messages. The first is the service
       
   124         * @param aDestination TMsvId of the destination folder
       
   125         * @param aStatus the status of the active object that is using this
       
   126         *     function as asynchronous service provider. This status will be
       
   127         *     set as completed when the server mtm active object is done.
       
   128         */
       
   129         void CopyFromLocalL(
       
   130             const CMsvEntrySelection& aSelection,
       
   131             TMsvId aDestination,
       
   132             TRequestStatus& aStatus );
       
   133         
       
   134         /**
       
   135         * From CBaseServerMtm: Copy messages
       
   136         * @param aSelection list of TMsvIds of messages. The first is the service
       
   137         * @param aStatus the status of the active object that is using this
       
   138         *     function as asynchronous service provider. This status will be
       
   139         *     set as completed when the server mtm active object is done.
       
   140         */
       
   141         void CopyWithinServiceL(
       
   142             const CMsvEntrySelection& aSelection,
       
   143             TMsvId aDestination,
       
   144             TRequestStatus& aStatus );
       
   145         
       
   146         /**
       
   147         * From CBaseServerMtm: Move messages from remote service to
       
   148         *     local folders
       
   149         * @param aSelection list of TMsvIds of messages. The first is the service
       
   150         * @param aDestination TMsvId of the destination folder (for example inbox)
       
   151         * @param aStatus the status of the active object that is using this
       
   152         *     function as asynchronous service provider. This status will be
       
   153         *     set as completed when the server mtm active object is done.
       
   154         */
       
   155         void MoveToLocalL(
       
   156             const CMsvEntrySelection& aSelection,
       
   157             TMsvId aDestination,
       
   158             TRequestStatus& aStatus );
       
   159         
       
   160         /**
       
   161         * From CBaseServerMtm: Move messages from local folder to
       
   162         *     remote service
       
   163         * @param aSelection list of TMsvIds of messages. The first is the service
       
   164         * @param aDestination TMsvId of the destination folder
       
   165         * @param aStatus the status of the active object that is using this
       
   166         *     function as asynchronous service provider. This status will be
       
   167         *     set as completed when the server mtm active object is done.
       
   168         */
       
   169         void MoveFromLocalL(
       
   170             const CMsvEntrySelection& aSelection,
       
   171             TMsvId aDestination,
       
   172             TRequestStatus& aStatus );
       
   173         
       
   174         /**
       
   175         * From CBaseServerMtm: Move messages
       
   176         * @param aSelection list of TMsvIds of messages. The first is the service
       
   177         * @param aDestination TMsvId of the destination folder.
       
   178         * @param aStatus the status of the active object that is using this
       
   179         *     function as asynchronous service provider. This status will be
       
   180         *     set as completed when the server mtm active object is done.
       
   181         */
       
   182         void MoveWithinServiceL(
       
   183             const CMsvEntrySelection& aSelection,
       
   184             TMsvId aDestination,
       
   185             TRequestStatus& aStatus );
       
   186 
       
   187         // Create, change, delete
       
   188         
       
   189         /**
       
   190         * From CBaseServerMtm: delete specified entries.
       
   191         * @param aSelection entries to be deleted
       
   192         * @param aStatus the status of the active object that is using this
       
   193         *     function as asynchronous service provider. This status will be
       
   194         *     set as completed when the server mtm active object is done.
       
   195         */
       
   196         void DeleteAllL(
       
   197             const CMsvEntrySelection& aSelection,
       
   198             TRequestStatus& aStatus );
       
   199         
       
   200         /**
       
   201         * From CBaseServerMtm: Create a new entry.
       
   202         * @param aNewEntry Basic settings for the new entry.
       
   203         * @param aStatus the status of the active object that is using this
       
   204         *     function as asynchronous service provider. This status will be
       
   205         *     set as completed when the server mtm active object is done.
       
   206         */
       
   207         void CreateL( TMsvEntry aNewEntry, TRequestStatus& aStatus );
       
   208         
       
   209         /**
       
   210         * From CBaseServerMtm: Change an entry.
       
   211         * @param aNewEntry New settings for the entry.
       
   212         * @param aStatus the status of the active object that is using this
       
   213         *     function as asynchronous service provider. This status will be
       
   214         *     set as completed when the server mtm active object is done.
       
   215         */
       
   216         void ChangeL( TMsvEntry aNewEntry, TRequestStatus& aStatus );
       
   217         
       
   218         // command and progress
       
   219 
       
   220         /**
       
   221         * From CBaseServerMtm: Execute any MTM specific asynchronous command.
       
   222         * @param aSelection List of TMsvIds of messages. The first is the service
       
   223         * @param aCommand The command to be executed
       
   224         * @param aParameter Any special parameter the specified command needs
       
   225         * @param aStatus the status of the active object that is using this
       
   226         *     function as asynchronous service provider. This status will be
       
   227         *     set as completed when the server mtm active object is done.
       
   228         */
       
   229         void StartCommandL(
       
   230             CMsvEntrySelection& aSelection,
       
   231             TInt aCommand,
       
   232             const TDesC8& aParameter,
       
   233             TRequestStatus& aStatus );
       
   234         
       
   235         /**
       
   236         * From CBaseServerMtm: Before releasing the server mtm, the message
       
   237         *     server can query, if the mtm is expecting another command soon,
       
   238         *     so that unloading should be delayed.
       
   239         * @return ETrue if more commands are expected, EFalse otherwise
       
   240         */
       
   241         TBool CommandExpected();
       
   242         
       
   243         /**
       
   244         * From CBaseServerMtm: Accessor to progress of current operation.
       
   245         * @return progress value
       
   246         */
       
   247         const TDesC8& Progress();
       
   248 
       
   249         /**
       
   250         * From CScheduleBaseServerMtm: Load default resource file
       
   251         */
       
   252         void LoadResourceFileL();
       
   253 
       
   254         /**
       
   255         * From CScheduleBaseServerMtm: Put data into schedule package
       
   256         * @param aParameter
       
   257         * @param aPackage
       
   258         */
       
   259         void PopulateSchedulePackage(const TDesC8& aParameter, const TBool aMove, TMsvSchedulePackage& aPackage) const;
       
   260         
       
   261     protected:  // New functions
       
   262         
       
   263     protected:  // Functions from base classes
       
   264         
       
   265         /**
       
   266         * From CActive: Cancel current operation.
       
   267         */
       
   268         void DoCancel();
       
   269 
       
   270         /**
       
   271         * From CBaseServerMtm: Do work.
       
   272         */
       
   273         void DoRunL();
       
   274 
       
   275         /**
       
   276         * From CBaseServerMtm: Complete current operation.
       
   277         * @param aError Error code to be returned as final status
       
   278         */
       
   279         void DoComplete( TInt aError );
       
   280 
       
   281         /**
       
   282         * From CScheduleBaseServerMtm: Restore scheduling settings
       
   283         */
       
   284         void RestoreScheduleSettingsL(TBool aRestoreErrorsFromResource = EFalse, TInt aErrorsResourceId = 0 );
       
   285 
       
   286     private:
       
   287 
       
   288         /**
       
   289         * By default Symbian OS constructor is private.
       
   290         */
       
   291         CMmsServerMtm(
       
   292             CRegisteredMtmDll& aRegisteredMtmDll,
       
   293             CMsvServerEntry* aInitialEntry );
       
   294 
       
   295         /**
       
   296         * construct function that may leave
       
   297         */
       
   298         void ConstructL();
       
   299 
       
   300         // By default, prohibit copy constructor
       
   301         CMmsServerMtm( const CMmsServerMtm& );
       
   302         // Prohibit assigment operator
       
   303         CMmsServerMtm& operator= ( const CMmsServerMtm& );
       
   304 
       
   305         /**
       
   306         * Loads settings (also schedule settings).
       
   307         * Sets service entry.
       
   308         * @return error code
       
   309         */
       
   310         void LoadSettingsL( TInt aCommand );
       
   311 
       
   312         /**
       
   313         * Send current selection to MMSC using current service.
       
   314         */
       
   315         void SendToMmscL();
       
   316 
       
   317         /**
       
   318         * Send current selection to MMSC using current service and
       
   319         * CMmsForwardMessage operation class.
       
   320         */
       
   321         void SendForwardRequestsToMmscL();
       
   322 
       
   323         /**
       
   324         * Fetch messages from MMSC using current service.
       
   325         */
       
   326         void FetchFromMmscL();
       
   327 
       
   328         /**
       
   329         * Check which entries have failed an operation
       
   330         * and rescedule the failed ones.
       
   331         */
       
   332         void UpdateEntriesL();
       
   333         
       
   334         /**
       
   335         * Reschedule entries for which forward has failed
       
   336         * @param aPackage schedule package needed in rescheduling
       
   337         */
       
   338         void HandleFailedForwardsL( TMsvSchedulePackage& aPackage );
       
   339         
       
   340         /**
       
   341         * Clean schedule for successfully sent entries
       
   342         */
       
   343         void HandleSuccessfulSendsL();
       
   344 
       
   345         /**
       
   346         * Reschedule entries for which sending has failed
       
   347         * @param aPackage schedule package needed in rescheduling
       
   348         */
       
   349         void HandleFailedSendsL( TMsvSchedulePackage& aPackage );
       
   350         
       
   351         /**
       
   352         * Cleanup after message generation.
       
   353         */
       
   354         void CleanupAfterMessageGenerationL();
       
   355         
       
   356         /**
       
   357         * Handle entries for which receiving has failed
       
   358         * @param aPackage schedule package needed in rescheduling
       
   359         * @param aFatalError an error that must be returned to caller
       
   360         * @return
       
   361         * - ETrue if fetching must be restarted immediately
       
   362         * - EFalse if normal scheduling or failing is wanted
       
   363         */
       
   364         TBool HandleFailedReceivesL( TMsvSchedulePackage& aPackage, TInt& aFatalError );
       
   365         
       
   366         /**
       
   367         * Clean up successfully fetched entries
       
   368         */
       
   369         void HandleSuccessfulReceivesL();
       
   370 
       
   371         /**
       
   372         * Clean up bad notification entries
       
   373         */
       
   374         void HandleBadNotificationsL();
       
   375 
       
   376         /**
       
   377         * Reschedule unhandled delivery reports
       
   378         * @param aPackage schedule package needed in rescheduling
       
   379         */
       
   380         void UpdateDeliveryReportsL( TMsvSchedulePackage& aPackage );
       
   381         
       
   382         /**
       
   383         * Handke read reports whose sending has failed
       
   384         */
       
   385         void HandleFailedReadReports();
       
   386 
       
   387 
       
   388         /**
       
   389         * Make dates for scheduled entries identical.
       
   390         * This is needed at least in debug version, because
       
   391         * ScheduleL does want to assert that the dates of all
       
   392         * the entries are identical. <br>
       
   393         * We don't care and would send anything, but Symbian OS doesn't
       
   394         * allow us to.
       
   395         * @param aSelection the entries to be handled
       
   396         * @param aInterval the delay between NOW and the actual operation.
       
   397         *     Must be positive, and greater than KMmsDelayInSeconds,
       
   398         *     otherwise KMmsDelayInSeconds will be used, because 
       
   399         *     the task scheduler will not handle tasks that are overdue
       
   400         * @param aClearError specifies if the old error from the entry
       
   401         *     should be cleared. Clearing is needed to prevent
       
   402         *     MsgErrorWatcher from reacting to the same error twice
       
   403         */
       
   404         void MakeDatesIdenticalL( CMsvEntrySelection& aSelection,
       
   405             TTimeIntervalSeconds aInterval, TBool aClearError = EFalse );
       
   406 
       
   407         /**
       
   408         * Decode the data content of a pushed message.
       
   409         * The content should be either a MMS notification or a
       
   410         * delivery report.
       
   411         * If the content is a MMS notification, the message must
       
   412         * be scheduled for fetching.
       
   413         */
       
   414         void DecodePushedMessageL();
       
   415 
       
   416         /**
       
   417         * Schedule fetching of message referred to by this notification.
       
   418         * The decoded message is stored in iMsvSelection.
       
   419         */
       
   420         void HandleNotificationL();
       
   421 
       
   422         /**
       
   423         * Schedule a delivery report for logging
       
   424         * The decoded message is stored in iMsvSelection.
       
   425         */
       
   426         void HandleDeliveryReportL();
       
   427 
       
   428         /** 
       
   429         * Update the contents of message log from the delivery report.
       
   430         * delete the handled delivery report.
       
   431         */
       
   432         void LogDeliveryReportL();
       
   433 
       
   434         /**
       
   435         * Check if there are notifications that have identical URI.
       
   436         * If yes, this is a duplicate, and should be discarded
       
   437         * @param aParent folder where the notifications are stored
       
   438         * @param aNotification MMS headers for the new notification for
       
   439         *     identity check.
       
   440         * @return ETrue if the notification is a duplicate and shoud be discarded
       
   441         *     EFalse if a duplicate has not been found
       
   442         */
       
   443         TBool PruneDuplicateNotificationsL( TMsvId aParent, CMmsHeaders& aNotification );
       
   444 
       
   445         /**
       
   446         * Checks the fate of existing notifications.
       
   447         * Checks if the notifications have expired, and if 
       
   448         * they have, they are deleted.
       
   449         * Also checks, if the notifications have failed the
       
   450         * maximum number of times. The failed notifications
       
   451         * are removed.
       
   452         * @param aSelection reference to a TMSVId list. At return it
       
   453         *     contains any notifications that still need rescheduling.
       
   454         *     If the list is empty, notifications from mmsFolder are added
       
   455         *     and checked.
       
   456         */
       
   457         void CheckNotificationsL( CMsvEntrySelection& aSelection );
       
   458 
       
   459         /**
       
   460         * Fake function for testing purposes.
       
   461         * Creates notifications containing file paths.
       
   462         */
       
   463         void CreateNotificationsL();
       
   464 
       
   465         /**
       
   466         * Create notification into member buffer
       
   467         * Fake function for testing purposes.
       
   468         * @param aUrl address of the message (path & filename)
       
   469         * @param aSize size of the message (file)
       
   470         */
       
   471         void CreateNotificationL( TDesC8& aUrl, TInt aSize );
       
   472 
       
   473         /**
       
   474         * Do the actual garbage collection
       
   475         * This means: If there are entries in outbox, check if
       
   476         * they have been sent. If they have, move them to sent
       
   477         * folder or delete them.
       
   478         * If there are entries in outbox, that have not been sent,
       
   479         * schedule them for sending (unless already scheduled).
       
   480         * If there are pending delivery reports, log them.
       
   481         * If there are notifications, check if the correspoding
       
   482         * messages have been fetched already. If they have, delete
       
   483         * the notifications.
       
   484         * If the messages have not been fetched, schedule them for
       
   485         * fetching (unlessa already scheduled).
       
   486         */
       
   487         void GarbageCollectionL();
       
   488 
       
   489         /**
       
   490         * Delete schedule and reset retries for all entries in list
       
   491         * @param aSelection list of entries to be cleared.
       
   492         */
       
   493         void CleanSchedulesL( CMsvEntrySelection& aSelection );
       
   494 
       
   495         /**
       
   496         * Find the folder where MMS messages are to be stored
       
   497         */
       
   498         TMsvId FindMMSFolderL();
       
   499 
       
   500         /*
       
   501         * Check if disk space is below critical level for scheduling.
       
   502         * Checks both message drive and drive C:, as scheduling data goes
       
   503         * to C: drive regardless of message drive.
       
   504         * Params are as for function TMmsGenUtils::DiskSpaceBelowCriticalLevelL,
       
   505         * but this subroutine checks drive C: automatically in additio to
       
   506         * drive specified.
       
   507         * @param aFs File server session.
       
   508         * @param aBytesToWrite number of bytes the caller is about to add.
       
   509         *        The value 0 checks if the current
       
   510         *        space is already below the CL. 
       
   511         * @param aDrive number of the drive to be checked.
       
   512         * @return ETrue if storage space would go below CL after adding
       
   513         *         aBytesToWrite more data, EFalse otherwise.
       
   514         *         Leaves on error with one of system-wide error code.
       
   515         *         e.g. KErrNotReady if drive contains no media.
       
   516         */
       
   517         TBool DiskSpaceBelowCriticalForSchedulingL( RFs* aFs,
       
   518             TInt aBytesToWrite, TInt aMessageDrive);
       
   519 
       
   520         /*
       
   521         * Helper function to schedule a selection (send or receive)
       
   522         *     and put the selection into "failed" state if schdeduling fails.
       
   523         * iMsvSelection must contain some entries to be scheduled.
       
   524         * @return error code
       
   525         */
       
   526         TInt ScheduleSelectionL();
       
   527 
       
   528         /** 
       
   529         * HandleDummyEntryL reads notification data from entry's store,
       
   530         * and then deletes the entry.
       
   531         */
       
   532         void HandleDummyEntryL();
       
   533 
       
   534         /** 
       
   535         * HandleMMBoxFlagL sets the stored-in-mmbox flag in indexentry
       
   536         * primarily according to notification or secondarily (if notification
       
   537         * does not specify it) according to shared data.
       
   538         * @param aEntry reference to indexentry into which the change is done
       
   539         */
       
   540         void HandleMMBoxFlagL( TMsvEntry& aEntry );
       
   541 
       
   542         /** 
       
   543         * Garbage collection of notification entries in Outbox.
       
   544         * Currently notifications can be only forward requests
       
   545         */
       
   546         void GcOutBoxNotificationsL();
       
   547 
       
   548         /**
       
   549         * Garbage collection of messages in outbox.
       
   550         */        
       
   551         void GcOutBoxMessagesL();
       
   552         
       
   553         /**
       
   554         * Garbage collection of notifications in MMS private folder.
       
   555         */        
       
   556         void GcMmsFolderNotificationsL();
       
   557         
       
   558         /**
       
   559         * Garbage collection of notifications in inbox.
       
   560         */        
       
   561         void GcInboxNotifications();
       
   562         
       
   563         /** 
       
   564         * Garbage collection of notification entries in mmbox folder.
       
   565         * Since 2.8
       
   566         */
       
   567         void GcMmboxFolderNotifications();
       
   568         
       
   569         /**
       
   570         * Find duplicate notification
       
   571         * @param aParent entry id, under where the duplicate is searched
       
   572         * @param aHeaders the original mms headers, whose duplicate is searched
       
   573         * @param aDuplicate entry id of the found duplicate
       
   574         */
       
   575         TInt FindDuplicateNotificationL( TMsvId aParent, 
       
   576             CMmsHeaders& aHeaders, TMsvId& aDuplicate );
       
   577             
       
   578         /**
       
   579         * Send a read report to the originator of the MMS message
       
   580         */
       
   581         void SendReadReportL();
       
   582         
       
   583         /**
       
   584         * Log command code for debugging purposes
       
   585         * @param aCommand The command code MMS Server MTM was entered with
       
   586         */
       
   587         void LogCommandCode( TInt aCommand );
       
   588         
       
   589         /**
       
   590         * Get id of the actual MMS service.
       
   591         * This is needed when MMS Server MTM is originally called using local service id
       
   592         */
       
   593         void GetRealServiceId( CMsvEntrySelection& aSelection );
       
   594         
       
   595         /**
       
   596         * Terminate caller or loop to retry in case settings cannot be loaded
       
   597         */
       
   598         void HandleLoadServiceError( TInt aError );
       
   599         
       
   600         /**
       
   601         * Log the parent of the first entry in the list (for debugging)
       
   602         */
       
   603         void LogEntryParent();
       
   604         
       
   605         /**
       
   606         * Make sure outbox entries are visible and that the service id
       
   607         * is restored in case of schedule deletion command
       
   608         */
       
   609         void RestoreVisibilityAndService();
       
   610         
       
   611     public:     // Data
       
   612     
       
   613     protected:  // Data
       
   614 
       
   615     private:    // Data
       
   616         CMsvEntrySelection* iMsvSelection; // current selection
       
   617         TMsvId  iServiceEntryId;    // Current service id
       
   618         TMsvId  iNotification;      // Notification entry under construction
       
   619         TRequestStatus* iRequestStatus; // status of the calling program
       
   620         // This class may not leave in case of out of memory state
       
   621         // when sending or receiving a message
       
   622         TBool iOOMState; // out of memory error indicator.
       
   623         TBuf8<KMsvProgressBufferLength> iProgressBuffer;
       
   624         CMmsSettings* iMmsSettings; // settings corresponding to iServiceentryId
       
   625         CMmsHeaders* iMmsHeaders; // just needed to stay alive for a while
       
   626         TInt iCurrentMessage;
       
   627         
       
   628         // State machine classes for different operations
       
   629         CMmsSendOperation* iSendOperation;
       
   630         CMmsReceiveMessage* iReceiveMessage;
       
   631         CMmsForwardOperation* iForwardOperation;
       
   632         CMmsDeleteOperation* iDeleteOperation;
       
   633         CMmsMmboxList* iUpdateMmboxList;
       
   634         CMmsReadReport* iReadReport;
       
   635         
       
   636         CMmsDecode* iDecoder; // decoder for notifications and delivery reports
       
   637         TInt iCommand;  // command for scheduled operations (send or receive)
       
   638         TInt iCurrentCommand; // The asynchronous function that was sent to us
       
   639         TBufC8<KMaxParameterLength> iParameter;
       
   640         TInt iError; // for collecting errors from different operations...
       
   641         CBufFlat* iEncodeBuffer; // for decoding notifications and delivery reports
       
   642         CLogClient *iLogClient; // For updating log
       
   643         CLogViewEvent *iLogViewEvent; // log view
       
   644         CLogEvent*          iLogEvent;
       
   645         TLogString          iLogString;
       
   646         CMmsLog*            iMmsLog;
       
   647         CDesCArray*         iRemoteParties;   // Pure addresses to log
       
   648         TInt                iMessageDrive;    // messages are on C: drive by default,
       
   649                                               // may be moved to other drive
       
   650         CMmsServerEntry*    iEntryWrapper;
       
   651         TParse              iParse; // member to save stack space
       
   652         
       
   653         TBool iDeliveryStatus;  //Delivered = ETrue , Rejected = EFalse
       
   654 
       
   655     public:     // Friend classes
       
   656     protected:  // Friend classes
       
   657     private:    // Friend classes
       
   658 
       
   659     };
       
   660 
       
   661 
       
   662 // panic function 
       
   663 GLREF_C void gPanic( TMmsPanic aPanic );
       
   664 
       
   665 #endif      // MMSSERVER_H
       
   666             
       
   667 // End of File