--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/applicationmanagement/server/src/AMDownloadManager.cpp Thu Dec 17 08:40:12 2009 +0200
@@ -0,0 +1,741 @@
+/*
+ * Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+* Description: Implementation of applicationmanagement components
+ *
+ */
+
+// INCLUDE FILES
+//#include <DownloadMgrClient.h>
+
+#include "AMDownloadManager.h"
+//#include "AMDownload.h"
+//#include "amdeploymentcomponent.h"
+#include "amsmlhelper.h"
+#include "debug.h"
+#include "AppMgmtSrvApp.h"
+#include <e32property.h>
+#include <aknnotewrappers.h>
+#include "ampskeys.h"
+#include "SyncService.h"
+#include "amprivateCRKeys.h"
+
+using namespace NApplicationManagement;
+
+// from THttpDownloadState
+const TText * KDownloadStates[] =
+ {
+ _S( "Empty" ), _S( "EHttpDlCreated" ), _S( "EHttpDlInprogress" ), _S( "EHttpDlPaused" ), _S( "EHttpDlCompleted" ), _S( "EHttpDlFailed" ),
+
+ // The following states are temporary.
+ // e.g. download adopt EHttpDlMoved state,
+ // but right after that, it returns to the
+ // original EHttpDlCompleted state
+
+ // download is moved from one client instance to another one.
+ _S( "EHttpDlMoved" ),
+ // MMC card or other storage media is removed from the phone.
+ _S( "EHttpDlMediaRemoved" ),
+ // MMC card or other storage media inserted and
+ // downloaded content file found on it.
+ // If MMC card inserted, but (partially) downloaded content file
+ // is not found on it, download is failed with error reason
+ // EContentFileIntegrity.
+ _S( "EHttpDlMediaInserted" ),
+ // Download process can be paused again. This event only occurs after
+ // EHttpDlNonPausable.
+ _S( "EHttpDlPausable" ),
+ // Download process cannot be paused, or the content will be lost.
+ _S( "EHttpDlNonPausable" ),
+ // Download is delete from another client instance.
+ _S( "EHttpDlDeleted" ),
+ // Download is started when it's already progressing
+ _S( "EHttpDlAlreadyRunning" ),
+ // Download is going to be deleted.
+ _S( "EHttpDlDeleting" ),
+
+ // Internally used download event. Do NOT deal with them
+ _S( "EHttpDlCancelTransaction" )
+ };
+
+// These enumarated values come with EHttpDlInprogress
+// The only exception is EHttpContentTypeReceived that pauses
+// the download until client app accepts and resumes, or
+// deletes/resets it.
+const TText * ProgStates(THttpProgressState state)
+ {
+ switch (state)
+ {
+ case EHttpProgNone:
+ return _S( "EHttpProgNone" );
+ case EHttpStarted:
+ return _S("EHttpStarted");
+ case EHttpProgCreatingConnection:
+ return _S("EHttpProgCreatingConnection");
+ case EHttpProgConnectionNeeded:
+ return _S("EHttpProgConnectionNeeded");
+
+ case EHttpProgConnected:
+ return _S("EHttpProgConnected");
+ case EHttpProgConnectionSuspended:
+ return _S("EHttpProgConnectionSuspended");
+ case EHttpProgDisconnected:
+ return _S("EHttpProgDisconnected");
+ case EHttpProgDownloadStarted:
+ return _S("EHttpProgDownloadStarted" );
+ case EHttpContentTypeRequested:
+ return _S("EHttpContentTypeRequested" );
+ case EHttpContentTypeReceived:
+ // Download status is EHttpDlPaused!
+ // Application can check the received content type here
+ // and decide whether to accept it or not.
+ // Call Start again to carry on download, or
+ // Delete to delete this download
+ return _S("EHttpContentTypeReceived" );
+ case EHttpProgSubmitIssued:
+ return _S("EHttpProgSubmitIssued" );
+ case EHttpProgResponseHeaderReceived:
+ return _S("EHttpProgResponseHeaderReceived" );
+ case EHttpProgResponseBodyReceived:
+ return _S("EHttpProgResponseBodyReceived" );
+ case EHttpProgRedirectedPermanently:
+ return _S("EHttpProgRedirectedPermanently" );
+ case EHttpProgRedirectedTemporarily:
+ return _S("EHttpProgRedirectedTemporarily" );
+ case EHttpProgMovingContentFile:
+ return _S("EHttpProgMovingContentFile" );
+ case EHttpProgContentFileMoved:
+ return _S("EHttpProgContentFileMoved" );
+ default:
+ return _S( "Unknown" );
+ }
+ }
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CAMDownloadManager::CAMDownloadManager
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CAMDownloadManager::CAMDownloadManager(MDownloadMngrObserver& aObserver) :
+ iObserver(aObserver)
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CAMDownloadManager::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CAMDownloadManager::ConstructL()
+ {
+ iOMASCOMOEnabled = ETrue;
+ iNoteDisabled = EFalse;
+
+ }
+
+// -----------------------------------------------------------------------------
+// CAMDownloadManager::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CAMDownloadManager* CAMDownloadManager::NewL(MDownloadMngrObserver& aObserver)
+ {
+ CAMDownloadManager* self = new( ELeave ) CAMDownloadManager( aObserver );
+
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop();
+
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+CAMDownloadManager::~CAMDownloadManager()
+ {
+ RDEBUG_3( "CAMDownloadManager::~CAMDownloadManager 0x%X - 0x%X", reinterpret_cast<TUint>( this ),
+ reinterpret_cast<TUint>(this)+sizeof( CAMDownloadManager ) );
+
+ iDownloads.ResetAndDestroy();
+
+ iPrevDownloads.ResetAndDestroy();
+
+ RDEBUG( "CAMDownloadManager::~CAMDownloadManager() - closing downloadmgr" );
+ if (iDownloadMgr.Handle())
+ iDownloadMgr.Close();
+
+
+ if (iServerId)
+ delete iServerId;
+
+
+ RDEBUG( "CAMDownloadManager::~CAMDownloadManager() - closed downloadmgr" );
+ }
+
+// ---------------------------------------------------------------------------
+// CancelDownloads
+// ---------------------------------------------------------------------------
+/*
+ void CAMDownloadManager::CancelDownloads()
+ {
+ TInt err = KErrNone;
+ TRAP( err, CancelDownloadsL() );
+ RDEBUG_2("CAMDownloadManager::Cancel() ERR(%d)", err);
+ User::LeaveIfError( err );
+ }
+ */
+
+// ---------------------------------------------------------------------------
+// CancelDownloads
+// ---------------------------------------------------------------------------
+/*
+ void CAMDownloadManager::CancelDownloadsL()
+ {
+ }
+ */
+
+// ---------------------------------------------------------------------------
+// CancelDownloadL
+// ---------------------------------------------------------------------------
+void CAMDownloadManager::CancelDownloadL(CAMDownload& aDownload)
+ {
+ RDEBUG("CAMDownloadManager::CancelDownloadL()");
+ ConnectHttpDownloadMgrL();
+
+ TInt delres(aDownload.StopDownload() );
+ if (delres != KErrNone)
+ {
+ RDEBUG8_3( "CAMDownloadManager::CancelDownloadL: ERROR Failed to delete download '%S': '%d'",
+ &aDownload.DownloadURI(), delres );
+ }
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CAMDownloadManager::ConnectHttpDownloadMgrL()
+// ------------------------------------------------------------------------------------------------
+void CAMDownloadManager::ConnectHttpDownloadMgrL()
+ {
+ if ( !iDownloadMgrConnected)
+ {
+ const TUid KUid =
+ {
+ 0x1020781C
+ // ApplicationManagementServer
+ };
+
+ iDownloadMgr.ConnectL(KUid, *this, EFalse);
+ iDownloadMgrConnected = ETrue;
+ RDEBUG( "CAMDownloadManager::ConnectHttpDownloadMgrL(): Connected to download manager" );
+ }
+ }
+
+// ----------------------------------------------------------------------------------------
+// CAMDownloadManager::AddDownloadL
+// ----------------------------------------------------------------------------------------
+void CAMDownloadManager::AddDownloadL(CDeploymentComponent *aComponent)
+ {
+ RDEBUG("CAMDownloadManager::AddDownloadL Add new Download: ");
+ TPtrC8 uriPtr(aComponent->DownloadURI() );
+ RDEBUG_HEX8(uriPtr.Ptr(), uriPtr.Size());
+ aComponent->SetCallback( this);
+ CAMDownload* download = 0;
+ download = FindDownload(aComponent->DownloadURI() );
+ if (download)
+ {
+ RDEBUG8_2("CAMDownloadManager::AddDownloadL Download already exist, cancelling: (%S)", &aComponent->DownloadURI());
+ CancelDownloadL( *download);
+ }
+
+ iNoteDisabled = EFalse;
+
+ // DM session alive. Check the type of Server Alert
+ // Silent or NOn-Silent
+
+
+ // PubSub key used to share information about the
+ // type of the server alert for device management session.
+ // Contains the identifier of server alert type
+ // started from DM Server
+
+
+ TInt nonSilentOperation = KErrNotFound;
+ RProperty::Get(KPSUidNSmlDMSyncApp, KSilentSession, nonSilentOperation);
+
+ iOMASCOMOEnabled = IsOMASCOMOEnabledL();
+
+ // If OMA SCOMO is not enabled then default make the download operation silent
+ if (!iOMASCOMOEnabled)
+ nonSilentOperation = 0;
+
+ // Get the type of session(silent or non-silent) from DM Session and store in AM server
+ // P&S key since DM Session is terminated as soon as download starts.
+
+ RProperty::Set(KUidPSApplicationManagementKeys, KAMOperationNonSilent,
+ nonSilentOperation);
+
+ // Set this P&S key so that DM UI will not be closed in case of server initiated session
+ // applicable only for Interactive, Informative or Non specified
+
+ TInt dmuinotclosed = 1;
+ RProperty::Set(KUidPSApplicationManagementKeys, KDMUINotClosed,
+ dmuinotclosed);
+
+ RHttpDownload& httpdownload(CreateHttpDownloadL(aComponent) );
+
+
+ CAMDownload* newDL = CAMDownload::NewL(httpdownload, aComponent);
+ CleanupStack::PushL(newDL);
+ iDownloads.Append(newDL);
+
+ // keep track of all the downloads in another array
+ // to ensure that downloads are not missed from actual array
+ // during cleanup
+
+ iPrevDownloads.Append(newDL);
+
+ // start the newly created download
+ newDL->StartDownload();
+ aComponent->SetStatusNode(EDownload_DownloadProgress);
+ TSmlProfileId ownerProfile;
+ SyncMLCurrentProfileIdL(ownerProfile);
+ aComponent->SetOwnerProfile(ownerProfile);
+ CleanupStack::Pop(newDL);
+
+
+ RDEBUG("CAMDownloadManager::AddDownloadL end");
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CAMDownloadManager::IsOMASCOMOEnabledL()
+// ------------------------------------------------------------------------------------------------
+
+TBool CAMDownloadManager::IsOMASCOMOEnabledL()
+ {
+ TInt adapterValue;
+
+ CRepository *repository = CRepository::NewLC ( KCRUidPrivateApplicationManagementKeys ) ;
+ repository->Get(KAMAdapterValue, adapterValue);
+ CleanupStack::PopAndDestroy();
+
+ if(adapterValue ==0 || adapterValue == 1)
+ return EFalse;
+ else
+ return ETrue;
+
+ }
+
+
+// ----------------------------------------------------------------------------------------
+// CAMDownloadManager::CreateHttpDownloadL
+// ----------------------------------------------------------------------------------------
+RHttpDownload& CAMDownloadManager::CreateHttpDownloadL(
+ CDeploymentComponent *aComponent)
+ {
+ RDEBUG( "CAMDownloadManager::CreateHttpDownload: start" );
+ ConnectHttpDownloadMgrL();
+ TBool dlCreated(EFalse);
+ RHttpDownload &dl = iDownloadMgr.CreateDownloadL(
+ aComponent->DownloadURI(), dlCreated);
+ iServerId = SmlHelper::GetCurrentServerIDL();
+ if (dlCreated)
+ {
+ RDEBUG( "CAMDownloadManager::CreateHttpDownload: Created Download" );
+ dl.SetBoolAttribute(EDlAttrNoContentTypeCheck, ETrue);
+ iDownloadMgr.SetBoolAttribute(EDlMgrSilentMode, ETrue);
+ SetIAPL(aComponent);
+ SetUserNamePassword(dl, aComponent);
+ }
+ else
+ {
+ RDEBUG( "CAMDownloadManager::CreateHttpDownload: Download already exists!" );
+ THttpDownloadState dlst;
+ dl.GetIntAttribute(EDlAttrState, (TInt32&)dlst );
+ THttpProgressState prst;
+ dl.GetIntAttribute(EDlAttrProgressState, (TInt32&)prst );
+
+ SetIAPL(aComponent);
+ RDEBUG_3( "CAMDownloadManager::CreateHttpDownload: DownloadState: '%s', progstate: '%s'", KDownloadStates[dlst], ProgStates( prst ) );
+
+ if (dlst == EHttpDlPaused)
+ {
+ RDEBUG( "CAMDownloadManager::CreateHttpDownload: download paused" );
+ }
+ else
+ {
+ RDEBUG( "CAMDownloadManager::CreateHttpDownload: resetting download!" );
+ dl.Reset();
+ }
+ }
+ RDEBUG( "CAMDownloadManager::CreateHttpDownload: end" );
+ return dl;
+ }
+
+// ----------------------------------------------------------------------------------------
+// CAMDownloadManager::SetIAPL
+// ----------------------------------------------------------------------------------------
+void CAMDownloadManager::SetIAPL(CDeploymentComponent *aComponent)
+ {
+ RDEBUG( "CAMDownloadManager::SetIAPL: start" );
+ TInt iap(KErrNotFound);
+
+ const TAMInstallOptions &opts = aComponent->InstallOpts();
+ RDEBUG_2( "CAMDownloadManager::SetIAPL : Setting Iap Id to %d ", opts.iIAP );
+
+ if (opts.iIAP == -1)
+ {
+ TRAPD( err, SmlHelper::GetDefaultIAPFromDMProfileL( iap ) )
+ ;
+ if (err != KErrNone)
+ {
+ RDEBUG_2("CAMDownloadManager::SetIAPL: ERROR when trying to fetch DM profile default IAP: %d", err );
+ }
+ }
+ else
+ {
+ iap = opts.iIAP;
+ }
+ if (iap == -1)
+ {
+ iap = 0; //as DL mgr treats 0 (zero) as "Always Ask"
+ }
+ iapid = iap;
+ TInt errDL(iDownloadMgr.SetIntAttribute(EDlMgrIap, iap) );
+ if (errDL != KErrNone)
+ {
+ RDEBUG_2("CAMDownloadManager::SetIAPL: ERROR when trying to set DownloadManager IAP: %d", errDL );
+ }
+ else
+ {
+ RDEBUG_2( "CAMDownloadManager::SetIAPL: Set IAP Id to (%d) ", iap);
+ }
+
+#ifdef _DEBUG
+ TInt err(iDownloadMgr.SetIntAttribute(EDlMgrIap, 11) );
+ RDEBUG_2( "CAMDownloadManager::SetIAPL (debug only): WARNING Overriding IAP Id to 11 results %d", err );
+#endif
+ }
+
+// ----------------------------------------------------------------------------------------
+// CAMDownloadManager::SetUserNamePassword
+// ----------------------------------------------------------------------------------------
+void CAMDownloadManager::SetUserNamePassword(RHttpDownload& aDownload,
+ CDeploymentComponent *aComponent)
+ {
+ RDEBUG( "CAMDownloadManager::SetUserNamePassword: start" );
+ const TAMInstallOptions &opts = aComponent->InstallOpts();
+ if (opts.iOptions.iPassword.Length() && opts.iOptions.iLogin.Length() )
+ {
+ TBuf8<KMaxPath> password;
+ TBuf8<KMaxPath> login;
+ password.Copy(opts.iOptions.iPassword);
+ login.Copy(opts.iOptions.iLogin);
+
+ TInt err(aDownload.SetStringAttribute(EDlAttrPassword, password) );
+ RDEBUG8_3( "CAMDownloadManager::SetUserNamePassword: response to EDlAttrPassword set to '%S': %d", &password, err );
+ err = aDownload.SetStringAttribute(EDlAttrUsername, login);
+ RDEBUG8_3( "CAMDownloadManager::SetUserNamePassword: response to EDlAttrUsername set to '%S': %d", &login, err );
+ }
+ RDEBUG( "CAMDownloadManager::SetUserNamePassword: end" );
+ }
+
+// ----------------------------------------------------------------------------------------
+// CAMDownloadManager::SyncMLCurrentProfileIdL
+// ----------------------------------------------------------------------------------------
+void CAMDownloadManager::SyncMLCurrentProfileIdL(TSmlProfileId& aOwnerProfile)
+ {
+ RDEBUG( "CAMDownloadManager::SyncMLCurrentProfileIdL: start" );
+#ifdef _DEBUG
+ TRAPD( erx, SmlHelper::GetCurrentProfileIdL( aOwnerProfile ) )
+ ;
+ if (erx != KErrNone)
+ {
+ RDEBUG_2( "CAMDownloadManager::SyncMLCurrentProfileIdL (debug): Failed to get profile id: %d", erx );
+ }
+ else
+ {
+ RDEBUG_2( "CAMDownloadManager::SyncMLCurrentProfileIdL (debug): Using profile id: %d", aOwnerProfile );
+ }
+#else
+ SmlHelper::GetCurrentProfileIdL( aOwnerProfile );
+ RDEBUG_2( "CAMDownloadManager::SyncMLCurrentProfileIdL: Find profile id: %d", aOwnerProfile );
+#endif
+ }
+
+// ----------------------------------------------------------------------------------------
+// CAMDownloadManager::FindDownload
+// ----------------------------------------------------------------------------------------
+CAMDownload* CAMDownloadManager::FindDownload(const TDesC8& aURI)
+ {
+ CAMDownload* download = 0;
+
+ //find corresponding download from list
+ for (TInt i(0); i < iDownloads.Count(); i++)
+ {
+ download = iDownloads[i];
+ if (download->DownloadURIMatch(aURI) )
+ {
+ RDEBUG("CAMDownloadManager::FindDownload: Found valid download");
+ break;
+ }
+ download = 0;
+ }
+ return download;
+ }
+
+// ----------------------------------------------------------------------------------------
+// CAMDownloadManager::FindDownload
+// ----------------------------------------------------------------------------------------
+CAMDownload* CAMDownloadManager::FindDownload(RHttpDownload& aDownload)
+ {
+ CAMDownload* download = 0;
+ TBuf8<KMaxUrlLength> uri;
+ DownloadURI(aDownload, uri);
+ download = FindDownload(uri);
+ return download;
+ }
+
+// ----------------------------------------------------------------------------------------
+// CAMDownloadManager::FindDownload
+// ----------------------------------------------------------------------------------------
+CAMDownload* CAMDownloadManager::FindDownload(
+ CDeploymentComponent *aComponent)
+ {
+ CAMDownload* download = 0;
+ download = FindDownload(aComponent->DownloadURI() );
+ return download;
+ }
+
+// ----------------------------------------------------------------------------------------
+// CAMDownloadManager::DownloadURI
+// ----------------------------------------------------------------------------------------
+void CAMDownloadManager::DownloadURI(RHttpDownload& aDownload, TDes8& aURI)
+ {
+ TInt err(aDownload.GetStringAttribute(EDlAttrReqUrl, aURI) );
+ RDEBUG_2("CAMDownloadManager::DownloadURI err: (%d)", err);
+ }
+
+// ----------------------------------------------------------------------------------------
+// CAMDownloadManager::HandleDMgrEventL
+// ----------------------------------------------------------------------------------------
+void CAMDownloadManager::HandleDMgrEventL(RHttpDownload& aDownload,
+ THttpDownloadEvent aEvent)
+ {
+ //RDEBUG_3( "CAMDownloadManager::HandleDMgrEventL: DownloadState: '%s', progstate: '%s'",
+ // KDownloadStates[aEvent.iDownloadState], ProgStates( aEvent.iProgressState ) );
+
+ TInt32 contentsize;
+ TInt32 downloadedsize;
+
+ User::LeaveIfError(aDownload.GetIntAttribute(EDlAttrDownloadedSize,
+ downloadedsize) );
+ User::LeaveIfError(aDownload.GetIntAttribute(EDlAttrLength, contentsize) );
+
+ CAMDownload* download = FindDownload(aDownload);
+
+ if ( !download)
+ {
+ TBuf8<KMaxUrlLength> uri;
+ DownloadURI(aDownload, uri);
+ RDEBUG8_2("CAMDownloadManager::HandleDMgrEventL: Could not find download: (%S)", &uri);
+ //User::Leave( KErrNotFound ); // Don't do this! DownloadMgrClient::HandleDMgrEventL does not handle leave correctly.
+ }
+ else
+ {
+ switch (aEvent.iDownloadState)
+ {
+ /* case EHttpDlPaused:
+ HandlePausedEventL( *download);
+ break;*/
+ case EHttpDlCreated:
+ {
+ if (aEvent.iProgressState == EHttpProgNone)
+ {
+ HandleNonProgEventL( *download);
+ }
+ }
+ break;
+ case EHttpDlInprogress:
+ {
+ HandleAlreadyRunningL(downloadedsize, contentsize, *download, aEvent.iProgressState);
+
+ if (!iNoteDisabled)
+ {
+ CSyncService *syncService =
+ CSyncService::NewL(NULL, KDevManServiceStart);
+ if (syncService)
+ {
+ syncService->EnableProgressNoteL(EFalse);
+ }
+
+ delete syncService;
+ iNoteDisabled = ETrue;
+ }
+ }
+ break;
+ case EHttpContentTypeReceived:
+ HandleContentTypeRecEventL( *download);
+ break;
+ case EHttpDlCompleted:
+ HandleDlCompletedEventL( *download);
+ break;
+ case EHttpDlPaused:
+ case EHttpDlFailed:
+ HandleDlFailedEventL( *download, aEvent.iDownloadState);
+ break;
+ case EHttpDlDeleting:
+ case EHttpDlDeleted:
+ HandleDlDeleteEventL(download);
+ break;
+ default:
+ /* RDEBUG8_2( "CAMDownloadManager::HandleDMgrEventL: Not handled download event: (%S)",
+ KDownloadStates[aEvent.iDownloadState] );
+
+ */
+ break;
+ }
+ }
+ RDEBUG( "CAMDownloadManager::HandleDMgrEventL: end" );
+ }
+
+// ----------------------------------------------------------------------------------------
+// CAMDownloadManager::HandlePausedEventL
+// ----------------------------------------------------------------------------------------
+void CAMDownloadManager::HandlePausedEventL(CAMDownload& aDownload)
+ {
+ RDEBUG( "CAMDownloadManager::HandlePausedEventL" );
+ aDownload.ContinueDownload();
+ }
+
+// ----------------------------------------------------------------------------------------
+// CAMDownloadManager::HandleNonProgEventL
+// ----------------------------------------------------------------------------------------
+void CAMDownloadManager::HandleNonProgEventL(CAMDownload& aDownload)
+ {
+ RDEBUG( "CAMDownloadManager::HandleNonProgEventL" );
+ aDownload.ContinueDownload();
+ }
+
+// ----------------------------------------------------------------------------------------
+// CAMDownloadManager::HandleContentTypeRecEventL
+// ----------------------------------------------------------------------------------------
+void CAMDownloadManager::HandleContentTypeRecEventL(CAMDownload& aDownload)
+ {
+ RDEBUG( "CAMDownloadManager::HandleContentTypeRecEventL: EHttpContentTypeReceived " );
+ const TDesC8& mimetype(aDownload.ContentMimeType() );
+ RDEBUG8_2( "CAMDownloadManager::HandleContentTypeRecEventL: Content type: (%S)", &mimetype );
+ }
+
+// ----------------------------------------------------------------------------------------
+// CAMDownloadManager::HandleDlCompletedEventL
+// ----------------------------------------------------------------------------------------
+void CAMDownloadManager::HandleDlCompletedEventL(CAMDownload& aDownload)
+ {
+ RDEBUG( "CAMDownloadManager::HandleDlCompletedEventL" );
+ aDownload.DownloadCompleted();
+ }
+
+// ----------------------------------------------------------------------------------------
+// CAMDownloadManager::HandleDlFailedEventL
+// ----------------------------------------------------------------------------------------
+void CAMDownloadManager::HandleDlFailedEventL(CAMDownload& aDownload, THttpDownloadState aDownloadState)
+ {
+ RDEBUG( "CAMDownloadManager::HandleDlFailedEventL" );
+ aDownload.DownloadFailedL(aDownloadState);
+ }
+
+// ----------------------------------------------------------------------------------------
+// CAMDownloadManager::HandleDlDeleteEventL
+// ----------------------------------------------------------------------------------------
+void CAMDownloadManager::HandleDlDeleteEventL(CAMDownload* aDownload)
+ {
+ RDEBUG( "CAMDownloadManager::HandleDlDeleteEventL - start" );
+ TInt idx(iDownloads.Find(aDownload) );
+ {
+ RDEBUG_2( "CAMDownloadManager::HandleDlDeleteEventL found download: (%d) delete it", idx );
+ iDownloads.Remove(idx);
+ // delete aDownload;
+ }
+ RDEBUG( "CAMDownloadManager::HandleDlDeleteEventL - end" );
+ }
+
+// ----------------------------------------------------------------------------------------
+// CAMDownloadManager::DownloadComplete
+// ----------------------------------------------------------------------------------------
+void CAMDownloadManager::DownloadComplete(CDeploymentComponent *aComponent,
+ TInt aStatus)
+ {
+ RDEBUG_2( "CAMDownloadManager::DownloadComplete - start with status (%d)", aStatus );
+ TInt err(KErrNone);
+ TRAP( err, DownloadCompleteL( aComponent ));
+ RDEBUG_2( "CAMDownloadManager::DownloadComplete - end with status (%d)", err);
+ }
+
+// ----------------------------------------------------------------------------------------
+// CAMDownloadManager::DownloadCompleteL
+// ----------------------------------------------------------------------------------------
+void CAMDownloadManager::DownloadCompleteL(CDeploymentComponent *aComponent)
+ {
+ RDEBUG( "CAMDownloadManager::DownloadComplete - start" );
+ __ASSERT_DEBUG( aComponent, User::Invariant() );
+
+ CAMDownload* dowload = FindDownload(aComponent);
+
+ TInt idx(iDownloads.Find(dowload) );
+ if (dowload)
+ dowload->StopDownload(); // delete RHttpDownload
+ if (KErrNotFound != idx)
+ {
+ // NOTICE: Download is removed from downloadmanager AFTER receiving EHttpDlDeleting message
+ // from RHttpDownload
+ // Call server
+ iObserver.ComponentDownloadComplete(aComponent, iapid, iServerId);
+ }
+
+ RDEBUG( "CAMDownloadManager::DownloadComplete - end" );
+ }
+
+// ----------------------------------------------------------------------------------------
+// CAMDownloadManager::UidExistsL
+// ----------------------------------------------------------------------------------------
+TBool CAMDownloadManager::UidExistsL(const TUid &aUid,
+ CDeploymentComponent *& aCompo, CDeploymentComponent *aIgnored)
+ {
+ TBool uidExist(EFalse);
+ uidExist = iObserver.HasUidL(aUid, aCompo, aIgnored);
+ return uidExist;
+ }
+
+// ----------------------------------------------------------------------------------------
+// CAMDownloadManager::DownloadCount
+// ----------------------------------------------------------------------------------------
+TInt CAMDownloadManager::DownloadCount() const
+ {
+ TInt count(0);
+ count = iDownloads.Count();
+ RDEBUG_2( "CAMDownloadManager::DownloadCount: (%d)", count );
+ return count;
+ }
+
+void CAMDownloadManager::HandleAlreadyRunningL(TInt32 aDownloadedSize,
+ TInt32 aContentSize, CAMDownload& aDownload, THttpProgressState aState)
+ {
+
+ aDownload.ProgressDialogL(aDownloadedSize, aContentSize, aState);
+
+ }
+
+// End of File