applicationmanagement/server/src/AMDownloader.cpp
branchRCL_3
changeset 58 5b858729772b
equal deleted inserted replaced
57:6757f1e2efd2 58:5b858729772b
       
     1 /*
       
     2  * Copyright (c) 2002-2004 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:  Implementation of applicationmanagement components
       
    15  *
       
    16  */
       
    17 
       
    18 
       
    19 // INCLUDE FILES
       
    20 //#include <BrowserUiInternalCRKeys.h>
       
    21 #include <downloadmgrclient.h>
       
    22 
       
    23 #include "AMDownloader.h"
       
    24 //#include "aminstalloptions.h"
       
    25 #include "debug.h"
       
    26 #include <e32property.h>
       
    27 #include <aknnotewrappers.h> 
       
    28 #include <AknNotify.h>
       
    29 #include <AknNotifyStd.h>
       
    30 #include <AknGlobalNote.h>
       
    31 #include "ampskeys.h"
       
    32 #include "ApplicationManagementConst.h"
       
    33 #include <applicationmanagement.rsg>
       
    34 #include <StringLoader.h>
       
    35 #include <etelpckt.h>
       
    36 #include <exterror.h>
       
    37 #include <wlanerrorcodes.h>
       
    38 #include <CoreApplicationUIsSDKCRKeys.h>// for KCRUidCoreApplicationUIs
       
    39 
       
    40 using namespace NApplicationManagement;
       
    41 
       
    42 // ============================ MEMBER FUNCTIONS ===============================
       
    43 
       
    44 // -----------------------------------------------------------------------------
       
    45 // CAMDownloader::CAMDownloader
       
    46 // C++ default constructor can NOT contain any code, that
       
    47 // might leave.
       
    48 // -----------------------------------------------------------------------------
       
    49 //
       
    50 CAMDownloader::CAMDownloader(RHttpDownload& aDownload,
       
    51         MAMDownloaderObserver& aObserver) :
       
    52         iDownload(aDownload), iObserver(aObserver)
       
    53         {
       
    54         }
       
    55 
       
    56 // -----------------------------------------------------------------------------
       
    57 // CAMDownloader::ConstructL
       
    58 // Symbian 2nd phase constructor can leave.
       
    59 // -----------------------------------------------------------------------------
       
    60 //
       
    61 void CAMDownloader::ConstructL()
       
    62     {
       
    63     iProgStarted=0;
       
    64     iSetFinalValue =0;
       
    65     iProgressCancelled = EFalse;
       
    66     iCurrentDownloadProgState = EHttpProgNone;
       
    67     iProgressNote= new(ELeave)CAppMgmtProgDialog(this);
       
    68     }
       
    69 
       
    70 // -----------------------------------------------------------------------------
       
    71 // CAMDownloader::NewL
       
    72 // Two-phased constructor.
       
    73 // -----------------------------------------------------------------------------
       
    74 //
       
    75 CAMDownloader* CAMDownloader::NewL(RHttpDownload& aDownload,
       
    76         MAMDownloaderObserver& aObserver)
       
    77     {
       
    78     CAMDownloader* self = new( ELeave ) CAMDownloader( aDownload, aObserver );
       
    79 
       
    80     CleanupStack::PushL(self);
       
    81     self->ConstructL();
       
    82     CleanupStack::Pop();
       
    83 
       
    84     return self;
       
    85     }
       
    86 
       
    87 // ---------------------------------------------------------------------------
       
    88 // Destructor
       
    89 // ---------------------------------------------------------------------------
       
    90 CAMDownloader::~CAMDownloader()
       
    91     {
       
    92     RDEBUG_3( "CAMDownloader::~CAMDownloader 0x%X - 0x%X", reinterpret_cast<TUint>( this ),
       
    93             reinterpret_cast<TUint>(this)+sizeof( CAMDownloader ) );
       
    94 
       
    95     if (iProgressNote)
       
    96         delete iProgressNote;
       
    97 
       
    98     if (iFileName)
       
    99         {
       
   100         delete iFileName;
       
   101         iFileName = NULL;
       
   102         }
       
   103 
       
   104     if (iContentType)
       
   105         {
       
   106         delete iContentType;
       
   107         iContentType = NULL;
       
   108         }
       
   109 
       
   110     delete iURI;
       
   111     iURI = NULL;
       
   112     }
       
   113 
       
   114 // ---------------------------------------------------------------------------
       
   115 // StartDownload()
       
   116 // ---------------------------------------------------------------------------
       
   117 TInt CAMDownloader::StartDownload()
       
   118     {
       
   119     RDEBUG("CAMDownloader::StartDownload");
       
   120     TInt err(iDownload.SetIntAttribute(EDlAttrAction, EMove) );
       
   121     RDEBUG_2("CAMDownload::StartDownload: response to EDlAttrAction set to true: (%d)", err );
       
   122 
       
   123     err = iDownload.Start();
       
   124     if (err == KErrNone)
       
   125         {
       
   126         RDEBUG( "CAMDownload::StartDownloadL: Started download successfully!!" );
       
   127         }
       
   128     else
       
   129         {
       
   130         RDEBUG_2( "CAMDownload::StartDownloadL: ERROR Failed to start downlad '%d'", err );
       
   131         }
       
   132     return err;
       
   133     }
       
   134 
       
   135 // ---------------------------------------------------------------------------
       
   136 // StopDownload()
       
   137 // ---------------------------------------------------------------------------
       
   138 TInt CAMDownloader::StopDownload()
       
   139     {
       
   140     RDEBUG("CAMDownloader::StopDownload");
       
   141     TInt result(KErrNone);
       
   142     if (!iProgressCancelled)
       
   143         {
       
   144         TRAP_IGNORE(iProgressNote->ProgressCompletedL());
       
   145         }
       
   146     result = iDownload.Delete();
       
   147     RDEBUG_2("CAMDownloader::StopDownload: result (%d)", result);
       
   148     return result;
       
   149     }
       
   150 
       
   151 // ---------------------------------------------------------------------------
       
   152 // ContinueDownload()
       
   153 // ---------------------------------------------------------------------------
       
   154 TInt CAMDownloader::ContinueDownload()
       
   155     {
       
   156     RDEBUG("CAMDownloader::ContinueDownload");
       
   157     TInt result(KErrNone);
       
   158     result = iDownload.Start();
       
   159     RDEBUG_2("CAMDownloader::ContinueDownload: result (%d)", result);
       
   160     return result;
       
   161     }
       
   162 
       
   163 void CAMDownloader::CreateAndUpdateProgressDialogL(TInt32 aDownloadedSize,
       
   164         TInt32 aContentSize, THttpProgressState aState)
       
   165     {
       
   166 
       
   167     if (iProgStarted && aState == EHttpProgConnectionSuspended)    
       
   168     {
       
   169      if (!iProgressCancelled)
       
   170         {
       
   171         TRAP_IGNORE(iProgressNote->ProgressCompletedL());
       
   172         }
       
   173      iProgressCancelled = ETrue;
       
   174     
       
   175     TInt UIdisabled=0;
       
   176     RProperty::Set(KUidPSApplicationManagementKeys, KAMServerUIEnabled,
       
   177                 UIdisabled);
       
   178 
       
   179      TApaTaskList taskList(CEikonEnv::Static()->WsSession() );
       
   180             TApaTask task = taskList.FindApp(TUid::Uid(KAppMgmtServerUid));
       
   181 
       
   182             task.SetWgId(CEikonEnv::Static()->RootWin().Identifier());
       
   183 
       
   184             if (task.Exists())
       
   185                 task.SendToBackground();
       
   186 
       
   187 
       
   188 
       
   189     iCurrentDownloadProgState = EHttpProgConnectionSuspended;          
       
   190 
       
   191      RDEBUG( "CreateAndUpdateProgressDialogL : CAMDownloader Connection Failed" );  
       
   192         HBufC *netlossnote = StringLoader::LoadLC(R_DOWNLOADFAILED_CONNECTION);
       
   193 
       
   194         CAknGlobalNote* globalNote = CAknGlobalNote::NewL();
       
   195         CleanupStack::PushL(globalNote);
       
   196         
       
   197         globalNote->ShowNoteL(EAknGlobalErrorNote, *netlossnote);
       
   198 
       
   199         CleanupStack::PopAndDestroy( 2);// globalNote, dialognote
       
   200 
       
   201     
       
   202     }
       
   203 
       
   204     if (!iProgStarted)
       
   205         {
       
   206 
       
   207         RDEBUG( "CAMDownloadManager::HandleAlreadyRunningL - StartProgressNoteL" );
       
   208         iProgressNote->StartProgressNoteL();
       
   209 
       
   210         // UI in progress whenever switch btween application occur AM server will be moved 
       
   211         // to foreground
       
   212 
       
   213         //Define P&Skey
       
   214 
       
   215 
       
   216         TInt UIenabled = 1;
       
   217         TInt err = RProperty::Set(KUidPSApplicationManagementKeys,
       
   218                 KAMServerUIEnabled, UIenabled);
       
   219         User::LeaveIfError(err); // invalid
       
   220 
       
   221 
       
   222         //Check if operation is silent or Non Silent
       
   223 
       
   224         TInt operNonSilent = -1;
       
   225 
       
   226         RProperty::Get(KUidPSApplicationManagementKeys,
       
   227                 KAMOperationNonSilent, operNonSilent);
       
   228 
       
   229          RDEBUG_2( "CAMDownloader::Value of operNonSilent '%d'", operNonSilent );
       
   230 
       
   231         if (operNonSilent==1 || operNonSilent==KErrNotFound)
       
   232             {
       
   233             TApaTaskList taskList(CEikonEnv::Static()->WsSession() );
       
   234             TApaTask task = taskList.FindApp(TUid::Uid(KAppMgmtServerUid));
       
   235 
       
   236             task.SetWgId(CEikonEnv::Static()->RootWin().Identifier());
       
   237 
       
   238             if (task.Exists())
       
   239                 task.BringToForeground();
       
   240 
       
   241             }
       
   242          else
       
   243             {
       
   244 			RDEBUG( "CAMDownloadManager::HandleAlreadyRunningL - CreateAndUpdateProgressDialogL UI enabled = 0" );
       
   245 
       
   246 		    TInt UIenabled = 0;
       
   247 			TInt err = RProperty::Set(KUidPSApplicationManagementKeys,
       
   248 			                KAMServerUIEnabled, UIenabled);
       
   249         	User::LeaveIfError(err); // invalid
       
   250 			}
       
   251 
       
   252         iProgStarted = 1;
       
   253         }
       
   254 
       
   255     if (!iSetFinalValue && aContentSize>=0)
       
   256         {
       
   257         RDEBUG( "CAMDownloadManager::HandleAlreadyRunningL - SetFinalValue" );
       
   258         if (!iProgressCancelled)
       
   259         {
       
   260         iProgressNote->SetFinalValueL(aContentSize);
       
   261         iSetFinalValue = 1;
       
   262         }
       
   263         }
       
   264     else
       
   265         if (aContentSize>=0)
       
   266          {
       
   267             RDEBUG( "CAMDownloadManager::HandleAlreadyRunningL - UpdateProcessL" );
       
   268             if (!iProgressCancelled)
       
   269             {
       
   270              iProgressNote->UpdateProcessL(aDownloadedSize);
       
   271              }
       
   272           }
       
   273 
       
   274     RDEBUG( "CAMDownloadManager::HandleAlreadyRunningL - END" );
       
   275 
       
   276     }
       
   277 
       
   278 // ---------------------------------------------------------------------------
       
   279 // CAMDownloader::FileNameFromDownloadL
       
   280 // ---------------------------------------------------------------------------
       
   281 void CAMDownloader::FileNameFromDownloadL()
       
   282     {
       
   283     RFile f;
       
   284     TInt err(iDownload.GetFileHandleAttribute(f));
       
   285     if (err == KErrNone)
       
   286         {
       
   287         TFileName fn;
       
   288         err = f.Name(fn);
       
   289         if (err == KErrNone)
       
   290             {
       
   291             if (iFileName)
       
   292                 {
       
   293                 delete iFileName;
       
   294                 iFileName = NULL;
       
   295                 }
       
   296             iFileName = fn.AllocL();
       
   297 
       
   298             }
       
   299         else
       
   300             {
       
   301 
       
   302             }
       
   303         }
       
   304     else
       
   305         {
       
   306         RDEBUG_2( "CAMDownloader::GetFileNameL: WARNING Failed to get download file handle '%d'", err );
       
   307         RDEBUG("CAMDownloader::GetFileNameL: Using filename instead");
       
   308         TBuf<KMaxPath> file;
       
   309         err = iDownload.GetStringAttribute(EDlAttrDestFilename, file);
       
   310         if (err == KErrNone)
       
   311             {
       
   312             if (iFileName)
       
   313                 {
       
   314                 delete iFileName;
       
   315                 iFileName = NULL;
       
   316                 }
       
   317             iFileName = file.AllocL();
       
   318 
       
   319             }
       
   320         else
       
   321             {
       
   322 
       
   323             }
       
   324         }
       
   325     }
       
   326 
       
   327 // ---------------------------------------------------------------------------
       
   328 // CAMDownloader::ContentTypeFromDownloadL
       
   329 // ---------------------------------------------------------------------------
       
   330 void CAMDownloader::ContentTypeFromDownloadL()
       
   331     {
       
   332     TBuf8<KMaxContentTypeLength> contype;
       
   333     TInt err(iDownload.GetStringAttribute(EDlAttrContentType, contype) );
       
   334     if (err != KErrNone)
       
   335         {
       
   336         RDEBUG_2( "CAMDownloader::ContentTypeFromDownloadL: Failed to get content type: %d", err );
       
   337         }
       
   338     else
       
   339         {
       
   340         if (iContentType)
       
   341             {
       
   342             delete iContentType;
       
   343             iContentType = NULL;
       
   344             }
       
   345         iContentType = contype.AllocL();
       
   346         RDEBUG( "CAMDownloader::ContentTypeFromDownloadL: ");RDEBUG_HEX8( iContentType->Ptr(), iContentType->Size() );
       
   347         }
       
   348     }
       
   349 
       
   350 // ---------------------------------------------------------------------------
       
   351 // CAMDownloader::DownloadURIFromDownloadL
       
   352 // ---------------------------------------------------------------------------
       
   353 void CAMDownloader::DownloadURIFromDownloadL()
       
   354     {
       
   355     TBuf8<KMaxUrlLength> uri;
       
   356     TInt err(iDownload.GetStringAttribute(EDlAttrReqUrl, uri) );
       
   357     if (err != KErrNone)
       
   358         {
       
   359         RDEBUG_2( "CAMDownloader::DownloadURIFromDownloadL: Failed to get uri: %d", err );
       
   360         }
       
   361     else
       
   362         {
       
   363         if (iURI)
       
   364             {
       
   365             delete iURI;
       
   366             iURI = NULL;
       
   367             }
       
   368         iURI = uri.AllocL();
       
   369         RDEBUG( "CAMDownloader::DownloadURIFromDownloadL: ");RDEBUG_HEX8( iURI->Ptr(), iURI->Size() );
       
   370         }
       
   371     }
       
   372 
       
   373 // ---------------------------------------------------------------------------
       
   374 // CAMDownloader::FileName
       
   375 // ---------------------------------------------------------------------------
       
   376 const TDesC& CAMDownloader::FileName()
       
   377     {
       
   378     if (iFileName)
       
   379         {
       
   380         return *iFileName;
       
   381         }
       
   382     else
       
   383         {
       
   384         TRAPD( err, FileNameFromDownloadL() )
       
   385         ;
       
   386         if (err == KErrNone)
       
   387             {
       
   388             return *iFileName;
       
   389             }
       
   390         }
       
   391 
       
   392     return KNullDesC();
       
   393     }
       
   394 
       
   395 // ---------------------------------------------------------------------------
       
   396 // CAMDownloader::MimeType
       
   397 // ---------------------------------------------------------------------------
       
   398 const TDesC8& CAMDownloader::MimeType()
       
   399     {
       
   400     if (iContentType)
       
   401         {
       
   402         return *iContentType;
       
   403         }
       
   404     else
       
   405         {
       
   406         TRAPD( err, ContentTypeFromDownloadL() )
       
   407         ;
       
   408         if (err == KErrNone)
       
   409             {
       
   410             return *iContentType;
       
   411             }
       
   412         }
       
   413     return KNullDesC8();
       
   414     }
       
   415 
       
   416 // ---------------------------------------------------------------------------
       
   417 // CAMDownloader::DownloadURI
       
   418 // ---------------------------------------------------------------------------
       
   419 const TDesC8& CAMDownloader::DownloadURI()
       
   420     {
       
   421     if (iURI)
       
   422         {
       
   423         return *iURI;
       
   424         }
       
   425     else
       
   426         {
       
   427         TRAPD( err, DownloadURIFromDownloadL() )
       
   428         ;
       
   429         if (err == KErrNone)
       
   430             {
       
   431             return *iURI;
       
   432             }
       
   433         }
       
   434     return KNullDesC8();
       
   435     }
       
   436 
       
   437 // ---------------------------------------------------------------------------
       
   438 // CompareDownloadURI
       
   439 // ---------------------------------------------------------------------------
       
   440 TBool CAMDownloader::CompareDownloadURI(const TDesC8& aURI)
       
   441     {
       
   442     TBool match(EFalse);
       
   443     if (DownloadURI() == aURI)
       
   444         {
       
   445         match = ETrue;
       
   446         }
       
   447     return match;
       
   448     }
       
   449 
       
   450 // ---------------------------------------------------------------------------
       
   451 // DownloadStatusCode
       
   452 // ---------------------------------------------------------------------------
       
   453 TInt32 CAMDownloader::DownloadStatusCodeL(THttpDownloadState aDownloadState)
       
   454     {
       
   455     RDEBUG_2( "CAMDownloader::DownloadStatusCodeL: State '%d'", aDownloadState );	
       
   456     
       
   457     TInt32 code;
       
   458     User::LeaveIfError(iDownload.GetIntAttribute(EDlAttrStatusCode, code) );
       
   459     RDEBUG_2( "CAMDownloader::DownloadStatusCodeL: ERROR download status code '%d'", code );
       
   460 
       
   461     THttpDownloadMgrError errx;
       
   462     User::LeaveIfError(iDownload.GetIntAttribute(EDlAttrErrorId,
       
   463             (TInt32&)errx ) );
       
   464     RDEBUG_2( "CAMDownloader::DownloadStatusCodeL: ERROR download error id '%d'", errx );
       
   465 
       
   466     TInt32 gerr;
       
   467     User::LeaveIfError(iDownload.GetIntAttribute(EDlAttrGlobalErrorId, gerr) );
       
   468     RDEBUG_2( "CAMDownloader::DownloadStatusCodeL: ERROR global error id '%d'", gerr );
       
   469 
       
   470     TInt32 res(KErrNone);
       
   471     if (code == 0 || code == 200)
       
   472         {
       
   473         res = errx;
       
   474         
       
   475         }
       
   476     else
       
   477         {
       
   478         res = code;
       
   479         }
       
   480 
       
   481     if (errx == EHttpUnhandled || errx == EGeneral || errx
       
   482             == EConnectionFailed || errx == ETransactionFailed)
       
   483         {
       
   484         res = gerr;
       
   485         }
       
   486     if (errx == EDiskFull)
       
   487         res = KStatusDowloadFailedOOM;
       
   488 
       
   489     if(errx == ETransactionFailed && gerr == -7376)
       
   490         res = KStatusAltDowldUnavailable;
       
   491 
       
   492     if (errx == EHttpAuthenticationFailed)
       
   493         res = KStatusAlternateDownldAuthFail;
       
   494 
       
   495     RDEBUG( "Result code visited" ); 
       
   496 
       
   497     if(iCurrentDownloadProgState == EHttpProgConnectionSuspended && aDownloadState == EHttpDlPaused)
       
   498     {
       
   499       RDEBUG( "Connection lost and  suspended" ); 
       
   500       res = KStatusDownloadFailed;
       
   501       
       
   502     }
       
   503 
       
   504     // Display note in case of download failure
       
   505     // if download fails because of network loss then display note specific to Networkloss
       
   506     // else display note for general
       
   507     if(errx != ENoError )
       
   508     TRAP_IGNORE(DisplayDownloadFailedNoteL(errx,gerr));
       
   509     
       
   510     if (!iProgressCancelled)
       
   511             {
       
   512             RDEBUG( "iProgressNote->ProgressCompletedL() Start" ); 
       
   513             TRAP_IGNORE(iProgressNote->ProgressCompletedL());
       
   514             RDEBUG( "iProgressNote->ProgressCompletedL() End" ); 
       
   515             }
       
   516     
       
   517     iProgressCancelled = ETrue;
       
   518     
       
   519     RDEBUG_2( "CAMDownloader::DownloadStatusCodeL: Status code (%d)", res );
       
   520     return res;
       
   521     }
       
   522 
       
   523 // ---------------------------------------------------------------------------
       
   524 // DisplayDownloadFailedNoteL
       
   525 // ---------------------------------------------------------------------------
       
   526 
       
   527 void CAMDownloader::DisplayDownloadFailedNoteL(THttpDownloadMgrError aError, TInt32 aGlobalErr)
       
   528     {
       
   529 
       
   530     TBool iOffline = EFalse;
       
   531     TInt allowed(0);
       
   532     CRepository* coreAppUisCr = CRepository::NewLC( KCRUidCoreApplicationUIs );
       
   533     coreAppUisCr->Get( KCoreAppUIsNetworkConnectionAllowed, allowed ) ;
       
   534     CleanupStack::PopAndDestroy( coreAppUisCr );
       
   535     if( allowed != ECoreAppUIsNetworkConnectionAllowed )
       
   536         {
       
   537         iOffline = ETrue;
       
   538         }
       
   539 
       
   540     // current phone in offline mode or connection failure display note to user that connection is lost
       
   541 
       
   542     if(aError == EConnectionFailed || iOffline)
       
   543         {
       
   544          RDEBUG( "DisplayDownloadFailedNoteL : CAMDownloader Connection Failed" );  
       
   545         HBufC *netlossnote = StringLoader::LoadLC(R_DOWNLOADFAILED_CONNECTION);
       
   546 
       
   547         CAknGlobalNote* globalNote = CAknGlobalNote::NewL();
       
   548         CleanupStack::PushL(globalNote);
       
   549         
       
   550         globalNote->ShowNoteL(EAknGlobalErrorNote, *netlossnote);
       
   551 
       
   552         CleanupStack::PopAndDestroy( 2);// globalNote, dialognote
       
   553         }
       
   554     else
       
   555         {
       
   556         RDEBUG( "DisplayDownloadFailedNoteL : CAMDownloader" );       
       
   557 
       
   558         HBufC *generrornote = StringLoader::LoadLC(R_DOWNLOADFAILED_GENERAL);
       
   559         TRequestStatus status;              
       
   560 
       
   561         CAknGlobalNote* dialog = CAknGlobalNote::NewLC();
       
   562         dialog->SetSoftkeys(R_AVKON_SOFTKEYS_OK_EMPTY);
       
   563         
       
   564         dialog->ShowNoteL(status, EAknGlobalErrorNote, *generrornote);
       
   565         User::WaitForRequest(status);
       
   566 
       
   567         // ignore the softkey status..
       
   568 
       
   569         CleanupStack::PopAndDestroy(2);         // pop dialog, generrornote
       
   570         }    
       
   571 
       
   572     }
       
   573 
       
   574 // ---------------------------------------------------------------------------
       
   575 // HandleDLProgressDialogExitL
       
   576 // ---------------------------------------------------------------------------
       
   577 
       
   578 void CAMDownloader::HandleDLProgressDialogExitL(TInt aButtonId)
       
   579     {
       
   580 
       
   581     if (aButtonId == EAknSoftkeyCancel)
       
   582         {
       
   583         iProgressCancelled = ETrue;
       
   584 
       
   585         HBufC* note = StringLoader::LoadLC( R_DOWNLOAD_CANCELLED);
       
   586 
       
   587         CAknGlobalNote* globalNote = CAknGlobalNote::NewL();
       
   588         CleanupStack::PushL(globalNote);
       
   589         globalNote->ShowNoteL(EAknGlobalInformationNote, *note);
       
   590 
       
   591         CleanupStack::PopAndDestroy( 2);// globalNote, note
       
   592 
       
   593 
       
   594         TInt UIdisabled=0;
       
   595         RProperty::Set(KUidPSApplicationManagementKeys, KAMServerUIEnabled,
       
   596                 UIdisabled);
       
   597 
       
   598         iObserver.SetStatus(KStatusUserCancelled);
       
   599         }
       
   600 
       
   601     }
       
   602 //  End of File