fotaapplication/fotaserver/src/FotaDlMgrClient.cpp
author hgs
Fri, 15 Oct 2010 11:46:45 +0530
changeset 73 ae69c2e8bc34
parent 51 2e64dc50f295
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
51
2e64dc50f295 201025_02
hgs
parents:
diff changeset
     1
/*
2e64dc50f295 201025_02
hgs
parents:
diff changeset
     2
 * Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies). 
2e64dc50f295 201025_02
hgs
parents:
diff changeset
     3
 * All rights reserved.
2e64dc50f295 201025_02
hgs
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
2e64dc50f295 201025_02
hgs
parents:
diff changeset
     5
 * under the terms of "Eclipse Public License v1.0"
2e64dc50f295 201025_02
hgs
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
2e64dc50f295 201025_02
hgs
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
2e64dc50f295 201025_02
hgs
parents:
diff changeset
     8
 *
2e64dc50f295 201025_02
hgs
parents:
diff changeset
     9
 * Initial Contributors:
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    11
 *
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    12
 * Contributors:
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    13
 *
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    14
 * Description:   Fota download manager client
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    15
 *
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    16
 */
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    17
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    18
//System includes
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    19
#include <sysutil.h> 
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    20
#include <bautils.h>
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    21
#include <cmmanager.h>
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    22
#include <cmconnectionmethod.h>
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    23
#include <devicedialogconsts.h>
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    24
#include <centralrepository.h>
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    25
#include <XQConversions>
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    26
#include <uri8.h> //For parsing uri
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    27
//User includes
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    28
#include "FotaDlMgrClient.h"
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    29
#include "FotaDlClient.h"
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    30
#include "FotaServer.h"
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    31
#include "fotanotifiers.h"
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    32
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    33
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    34
//  Two phase construction
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    35
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    36
DownloadManagerClient* DownloadManagerClient::NewL(CFotaServer* aServer)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    37
    {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    38
    DownloadManagerClient* self = new (ELeave) DownloadManagerClient(aServer);
73
hgs
parents: 51
diff changeset
    39
    CleanupStack::PushL( self );
51
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    40
    self->ConstructL();
73
hgs
parents: 51
diff changeset
    41
    CleanupStack::Pop(self);
51
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    42
    return self;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    43
    }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    44
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    45
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    46
//  The constructor
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    47
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    48
DownloadManagerClient::DownloadManagerClient(CFotaServer* aServer) :
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    49
    iDownloadManager(NULL), iDownloadClient(NULL), iFotaServer(aServer),
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    50
            iInitialized(EFalse), iDownloadSubmitted(EFalse), iReservedSize(
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    51
                    5242880), iNotifParams(NULL), iNotifier (NULL)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    52
    {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    53
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    54
    }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    55
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    56
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    57
//  The destructor
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    58
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    59
DownloadManagerClient::~DownloadManagerClient()
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    60
    {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    61
    FLOG(_L("DownloadManagerClient::~DownloadManagerClient >>"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    62
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    63
    if (iDownloadClient)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    64
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    65
        delete iDownloadClient;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    66
        iDownloadClient = NULL;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    67
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    68
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    69
    UninitDownloadMgr(); //Closes the RFs session and iDownloadManager.
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    70
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    71
    iFs.Close();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    72
    
73
hgs
parents: 51
diff changeset
    73
hgs
parents: 51
diff changeset
    74
    
hgs
parents: 51
diff changeset
    75
    if (iNotifier)
hgs
parents: 51
diff changeset
    76
        {
hgs
parents: 51
diff changeset
    77
        FLOG(_L("DownloadManagerClient::~DownloadManagerClient, iNotifier >>"));
hgs
parents: 51
diff changeset
    78
        delete iNotifier;
hgs
parents: 51
diff changeset
    79
        iNotifier = NULL;
hgs
parents: 51
diff changeset
    80
        FLOG(_L("DownloadManagerClient::~DownloadManagerClient, iNotifier <<"));
hgs
parents: 51
diff changeset
    81
        }
51
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    82
    if (iNotifParams)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    83
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    84
        FLOG(_L("DownloadManagerClient::~DownloadManagerClient, iNotifParams >>"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    85
        delete iNotifParams;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    86
        iNotifParams = NULL;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    87
        FLOG(_L("DownloadManagerClient::~DownloadManagerClient, iNotifParams <<"));
73
hgs
parents: 51
diff changeset
    88
        }    
hgs
parents: 51
diff changeset
    89
        
51
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    90
    FLOG(_L("DownloadManagerClient::~DownloadManagerClient <<"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    91
    }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    92
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    93
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    94
//  Two phase construction
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    95
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    96
void DownloadManagerClient::ConstructL()
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    97
    {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    98
    FLOG(_L("DownloadManagerClient::ConstructL >>"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    99
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   100
    TInt err;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   101
    CRepository* centrep(NULL);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   102
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   103
    TRAP(err, centrep = CRepository::NewL( KCRUidFotaDiskStorage ) );
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   104
    if (centrep)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   105
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   106
        err = centrep->Get(KFotaDiskSpaceReservationKey, iReservedSize);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   107
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   108
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   109
    delete centrep;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   110
    centrep = NULL;
73
hgs
parents: 51
diff changeset
   111
    
hgs
parents: 51
diff changeset
   112
    iNotifier = CFotaDownloadNotifHandler::NewL(this);
hgs
parents: 51
diff changeset
   113
    
51
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   114
    __LEAVE_IF_ERROR(iFs.Connect());
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   115
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   116
    iProgress = EFalse;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   117
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   118
    FLOG(_L("DownloadManagerClient::ConstructL, reservation needed is %d <<"),iReservedSize);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   119
    }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   120
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   121
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   122
//  Initializes the download manager for fota requirements
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   123
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   124
int DownloadManagerClient::InitDownloadMgr()
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   125
    {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   126
    FLOG(_L("DownloadManagerClient::InitDownloadMgr >>"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   127
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   128
    int ret = EOk;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   129
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   130
    if (!iInitialized)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   131
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   132
        iDownloadManager = new DownloadManager("FotaServer"); //Step 0
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   133
        connect(iDownloadManager,
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   134
                SIGNAL(downloadManagerEvent(DownloadManagerEvent *)), this,
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   135
                SLOT(DownloadMgrEventRecieved(DownloadManagerEvent *))); //step 1
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   136
        //Scope as false signifies that the download should happen on fota process
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   137
        bool scope = false;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   138
        ret = iDownloadManager->initialize(scope); //Step 2
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   139
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   140
#if defined(__WINS__)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   141
        iDownloadManager->setProxy("bswebproxy01.americas.nokia.com", 8080); //Step 3/
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   142
#endif
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   143
        //Set the progress mode of download to be non quite
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   144
        ret = iDownloadManager->setAttribute(ProgressMode, NonQuiet);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   145
        //Set the persistent mode of download to be active.
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   146
        ret = iDownloadManager->setAttribute(PersistantMode, Active);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   147
        //Set the default destination path for all the downloads
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   148
        ret = iDownloadManager->setAttribute(DefaultDestinationPath, DefaultPath);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   149
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   150
        if (iFotaServer->iPackageState.iIapId > 0)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   151
            {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   152
            QString name;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   153
            TRAPD(err, name = GetIapNameWithIdL(iFotaServer->iPackageState.iIapId));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   154
            HBufC* temp = XQConversions::qStringToS60Desc(name);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   155
            FLOG(_L("IAP name for ID %d is %S, err = %d"), iFotaServer->iPackageState.iIapId, temp, err);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   156
            delete temp;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   157
#if defined(__WINS__)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   158
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   159
#else
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   160
            if (err == KErrNone)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   161
                {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   162
                FLOG(_L("Setting IAP =int for the single download"), iFotaServer->iPackageState.iIapId);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   163
                ret = iDownloadManager->setAttribute(AccessPoint, name);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   164
                }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   165
#endif  
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   166
            }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   167
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   168
        iInitialized = ETrue;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   169
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   170
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   171
    FLOG(_L("DownloadManagerClient::InitDownloadMgr, ret = %d <<"), ret);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   172
    return ret;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   173
    }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   174
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   175
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   176
//  Uninitializes the download manager
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   177
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   178
void DownloadManagerClient::UninitDownloadMgr()
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   179
    {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   180
    FLOG(_L("DownloadManagerClient::UninitDownloadMgr >>"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   181
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   182
    if (iDownloadManager)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   183
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   184
        disconnect(iDownloadManager,
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   185
                SIGNAL(downloadManagerEvent(DownloadManagerEvent *)), this,
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   186
                SLOT(DownloadMgrEventRecieved(DownloadManagerEvent *)));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   187
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   188
        iDownloadManager->deleteLater();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   189
        iDownloadManager = NULL;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   190
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   191
    iInitialized = EFalse;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   192
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   193
    FLOG(_L("DownloadManagerClient::UninitDownloadMgr <<"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   194
    }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   195
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   196
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   197
//  Gets the access point name for a given access point id.
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   198
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   199
QString DownloadManagerClient::GetIapNameWithIdL(TInt aIapId)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   200
    {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   201
    FLOG(_L("DownloadManagerClient::GetIapNameWithIdL, iapid = %d"), aIapId);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   202
    
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   203
    QString name(NULL);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   204
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   205
    RCmManager cmManager;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   206
    cmManager.OpenL();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   207
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   208
    RCmConnectionMethod conn;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   209
    conn = cmManager.ConnectionMethodL(aIapId);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   210
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   211
    HBufC* temp = conn.GetStringAttributeL(CMManager::ECmName);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   212
    name = QString::fromUtf16(temp->Ptr(), temp->Length());
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   213
    delete temp;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   214
    temp = NULL;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   215
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   216
    conn.Close();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   217
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   218
    cmManager.Close();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   219
    FLOG(_L("DownloadManagerClient::GetIapNameWithIdL <<"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   220
    return name;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   221
    }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   222
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   223
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   224
//  Starts the download using a given url
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   225
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   226
void DownloadManagerClient::DownloadL(const TDesC8& url)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   227
    {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   228
    FLOG(_L("DownloadManagerClient::Download >>"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   229
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   230
    iDownloadSubmitted = EFalse;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   231
    iProgress = EFalse;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   232
    //Validate url...
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   233
    
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   234
    TUriParser8 parser;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   235
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   236
    if (parser.Parse(url) && !parser.IsSchemeValid())
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   237
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   238
        FLOG(_L("URL is malformed.. finalizing download"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   239
        iFotaServer->iPackageState.iState = RFotaEngineSession::EDownloadFailed;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   240
        iFotaServer->iPackageState.iResult= RFotaEngineSession::EResMalformedOrBadURL;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   241
        iFotaServer->iDatabase->OpenDBL();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   242
        iFotaServer->iDatabase->SetStateL(iFotaServer->iPackageState, KNullDesC8, EFDBState | EFDBResult);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   243
        iFotaServer->iDatabase->CloseAndCommitDB();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   244
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   245
        iFotaServer->FinalizeDownloadL();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   246
        TRAP_IGNORE(ShowDialogL(EFwDLNonResumableFailure));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   247
        return;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   248
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   249
    
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   250
    FLOG(_L("DownloadManagerClient::DownloadL, State 2 - init download manager"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   251
    InitDownloadMgr();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   252
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   253
    //Remove any existing download for this client
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   254
    iDownloadManager->removeAll();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   255
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   256
    DeleteUpdatePackageL();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   257
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   258
    DownloadType type = Parallel;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   259
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   260
    if (!iDownloadClient)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   261
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   262
        iDownloadClient = new DownloadClient(this);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   263
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   264
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   265
    FLOG(_L("DownloadManagerClient::DownloadL, State 3 - creating download"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   266
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   267
    QString temp = QString::fromUtf8(
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   268
            reinterpret_cast<const char*> (url.Ptr()), url.Length());
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   269
    int err (0);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   270
    if ((err = iDownloadClient->CreateDownload(temp, type)) != 0)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   271
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   272
        FLOG(_L("Error in creating download"), err);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   273
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   274
    else if ((err = iDownloadClient->SetDownloadAttributes()) != 0)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   275
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   276
        FLOG(_L("Error in setting attributes for download: %d"), err);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   277
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   278
    else 
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   279
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   280
        iFotaServer->iPackageState.iState  = RFotaEngineSession::EStartingDownload;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   281
        iFotaServer->iPackageState.iResult = KErrNotFound;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   282
        iFotaServer->iDatabase->OpenDBL();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   283
        iFotaServer->iDatabase->SetStateL(iFotaServer->iPackageState, KNullDesC8, EFDBState | EFDBResult);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   284
        iFotaServer->iDatabase->CloseAndCommitDB();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   285
        iDownloadSubmitted = ETrue;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   286
        iFotaServer->SetStartupReason(EFotaDownloadInterrupted);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   287
        
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   288
        iDownloadClient->Start();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   289
        FLOG(_L("Download is submitted successfully"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   290
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   291
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   292
    if (err == ENotOk)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   293
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   294
        iFotaServer->iDatabase->OpenDBL();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   295
        iFotaServer->iPackageState.iState = RFotaEngineSession::EDownloadFailed;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   296
        iFotaServer->iPackageState.iResult = RFotaEngineSession::EResUndefinedError;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   297
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   298
        iFotaServer->iDatabase->SetStateL(iFotaServer->iPackageState,  KNullDesC8, EFDBState | EFDBResult);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   299
        iFotaServer->iDatabase->CloseAndCommitDB();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   300
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   301
        iFotaServer->FinalizeDownloadL();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   302
        TRAP_IGNORE(ShowDialogL(EFwDLNonResumableFailure));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   303
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   304
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   305
    FLOG(_L("DownloadManagerClient::Download <<"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   306
    }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   307
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   308
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   309
//  Pauses an ongoing download.
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   310
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   311
void DownloadManagerClient::PauseDownloadL()
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   312
    {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   313
    FLOG(_L("DownloadManagerClient::PauseDownloadL >>"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   314
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   315
    TInt ret(ENotOk);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   316
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   317
    if (iDownloadClient)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   318
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   319
        ret = iDownloadClient->Pause(UserCancelled);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   320
        
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   321
        __LEAVE_IF_ERROR(ret);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   322
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   323
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   324
    FLOG(_L("DownloadManagerClient::PauseDownloadL <<"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   325
    }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   326
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   327
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   328
//  Tries to resume a suspended download
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   329
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   330
void DownloadManagerClient::TryResumeDownloadL()
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   331
    {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   332
    FLOG(_L("DownloadManagerClient::TryResumeDownloadL >>"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   333
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   334
    TInt ret(ENotOk);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   335
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   336
    FLOG(_L("DownloadManagerClient::TryResumeDownloadL, State 1 - init download manager"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   337
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   338
    __LEAVE_IF_ERROR(InitDownloadMgr());
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   339
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   340
    iDownloadSubmitted = ETrue;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   341
    iProgress = EFalse;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   342
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   343
    if (!iDownloadClient)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   344
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   345
        iDownloadClient = new DownloadClient(this);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   346
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   347
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   348
    iFotaServer->SetStartupReason(EFotaDownloadInterrupted);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   349
    ret = iDownloadClient->Resume();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   350
    
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   351
    if (ret == ENotOk )
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   352
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   353
        if (iFotaServer->DecrementDownloadRestartCount())
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   354
            {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   355
            FLOG(_L("There is no paused download! Hence restarting download..."));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   356
            DownloadL(iFotaServer->iLastFwUrl);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   357
            }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   358
        else
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   359
            {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   360
            FLOG(_L("There is no paused download! Restart exhausted and hence finalizing download..."));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   361
            iFotaServer->iPackageState.iState = RFotaEngineSession::EDownloadFailed;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   362
            
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   363
            if (iFotaServer->iPackageState.iResult == -1 )
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   364
                iFotaServer->iPackageState.iResult = RFotaEngineSession::EResUndefinedError;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   365
            
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   366
            iDownloadSubmitted = EFalse;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   367
            iFotaServer->FinalizeDownloadL();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   368
            TRAP_IGNORE(ShowDialogL(EFwDLNonResumableFailure));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   369
            }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   370
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   371
    FLOG(_L("DownloadManagerClient::TryResumeDownloadL, ret = %d <<"), ret);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   372
    }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   373
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   374
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   375
//  The slot which gets all the download manager events.
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   376
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   377
bool DownloadManagerClient::DownloadMgrEventRecieved(
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   378
        DownloadManagerEvent *event)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   379
    {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   380
    FLOG(_L("DownloadManagerClient::event >>"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   381
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   382
    DownloadManagerEvent::Event type = (DownloadManagerEvent::Event) event->type();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   383
    TBool ret(EFalse);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   384
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   385
    FLOG(_L("Download Manager Event Type: %d"), type);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   386
    switch (type)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   387
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   388
        case DownloadManagerEvent::Created:
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   389
            {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   390
            FLOG(_L("Download is created..."));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   391
            ret = ETrue;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   392
            break;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   393
            }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   394
        case DownloadManagerEvent::Removed:
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   395
            {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   396
            FLOG(_L("Download is cleared..."));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   397
            ret = ETrue;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   398
            break;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   399
            }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   400
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   401
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   402
    FLOG(_L("DownloadManagerClient::event, ret = %d <<"), ret);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   403
    return ret;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   404
    }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   405
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   406
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   407
//  Called by the download client when the single download begins.
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   408
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   409
void DownloadManagerClient::StartDownloadProgress(QString name,
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   410
        QString version, int size)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   411
    {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   412
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   413
    HBufC8* temp1 = XQConversions::qStringToS60Desc8(name);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   414
    HBufC8* temp2 = XQConversions::qStringToS60Desc8(version);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   415
    iFotaServer->iPackageState.iState = RFotaEngineSession::EDownloadProgressing;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   416
    iFotaServer->iPackageState.iPkgSize = size;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   417
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   418
    if (temp1->Length() <= iFotaServer->iPackageState.iPkgName.MaxLength())
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   419
        iFotaServer->iPackageState.iPkgName.Copy(temp1->Des());
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   420
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   421
    if (temp2->Length() <= iFotaServer->iPackageState.iPkgVersion.MaxLength())
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   422
        iFotaServer->iPackageState.iPkgVersion.Copy(temp2->Des());
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   423
    delete temp1;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   424
    delete temp2;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   425
    TRAP_IGNORE(
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   426
            iFotaServer->iDatabase->OpenDBL();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   427
            iFotaServer->iDatabase->SetStateL( iFotaServer->iPackageState, KNullDesC8, EFDBPkgName|EFDBVersion|EFDBPkgSize|EFDBState);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   428
            iFotaServer->iDatabase->CloseAndCommitDB();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   429
            );
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   430
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   431
    if (!iFotaServer->iPackageState.iSessionType)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   432
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   433
        iFotaServer->StartDownloadDialog(name, version, size);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   434
        iFotaServer->ConstructApplicationUI(ETrue);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   435
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   436
    }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   437
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   438
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   439
//  Called by the download client to update the progress of download.
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   440
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   441
void DownloadManagerClient::UpdateDownloadProgress(int progress)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   442
    {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   443
    FLOG(_L("DownloadManagerClient::UpdateDownloadProgress, progress = %d >>"),
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   444
            progress );
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   445
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   446
    iProgress = ETrue;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   447
    
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   448
    if (!iFotaServer->iPackageState.iSessionType)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   449
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   450
        iFotaServer->UpdateDownloadDialog(progress);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   451
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   452
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   453
    FLOG(_L("DownloadManagerClient::UpdateDownloadProgress <<"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   454
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   455
    }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   456
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   457
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   458
//  Called by the download client when the download is complete, either successfully or unsuccessfully.
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   459
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   460
void DownloadManagerClient::HandleDownloadEvent(Download::State dlstate,
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   461
        int err0)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   462
    {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   463
    FLOG(_L("DownloadManagerClient::HandleDownloadEvent, status = %d >>"),  dlstate);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   464
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   465
    iDownloadSubmitted = EFalse;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   466
    iProgress = EFalse;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   467
    TInt notetype(-1);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   468
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   469
    if (iDownloadClient)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   470
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   471
        delete iDownloadClient;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   472
        iDownloadClient = NULL;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   473
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   474
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   475
    if (dlstate == Download::Completed)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   476
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   477
        iFotaServer->iPackageState.iState = RFotaEngineSession::EDownloadComplete;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   478
        iFotaServer->iPackageState.iResult = -1;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   479
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   480
    else if (dlstate == Download::Paused)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   481
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   482
        iFotaServer->iPackageState.iState = RFotaEngineSession::EDownloadProgressing;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   483
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   484
        MapDownloadErrors(err0);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   485
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   486
    else if (dlstate == Download::Failed)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   487
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   488
        iFotaServer->iPackageState.iState = RFotaEngineSession::EDownloadFailed;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   489
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   490
        MapDownloadErrors(err0);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   491
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   492
        if(iFotaServer->iPackageState.iResult == RFotaEngineSession::EResDLFailDueToDeviceOOM
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   493
           || iFotaServer->iPackageState.iResult == RFotaEngineSession::EResDLFailDueToNWIssues)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   494
            {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   495
            iFotaServer->iPackageState.iState = RFotaEngineSession::EDownloadProgressing;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   496
            }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   497
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   498
    else if (dlstate == Download::Cancelled)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   499
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   500
        iFotaServer->iPackageState.iState = RFotaEngineSession::EDownloadProgressing;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   501
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   502
        MapDownloadErrors(err0);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   503
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   504
    else if (dlstate == Download::Paused)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   505
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   506
        iFotaServer->iPackageState.iState = RFotaEngineSession::EDownloadProgressing;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   507
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   508
        MapDownloadErrors(err0);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   509
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   510
    else
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   511
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   512
        FLOG(_L(" I DO NOT KNOW THIS DLSTATE!!"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   513
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   514
    TRAPD(err,
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   515
            iFotaServer->iDatabase->OpenDBL();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   516
            iFotaServer->iDatabase->SetStateL( iFotaServer->iPackageState, KNullDesC8, EFDBState|EFDBResult);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   517
            iFotaServer->iDatabase->CloseAndCommitDB();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   518
    );
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   519
    FLOG(_L("Updating fota database, error = %d"), err);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   520
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   521
    UninitDownloadMgr();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   522
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   523
    if (iFotaServer->iPackageState.iState == RFotaEngineSession::EDownloadComplete
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   524
            && iFotaServer->iPackageState.iUpdateLtr)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   525
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   526
        iFotaServer->SetStartupReason(EFotaUpdateInterrupted);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   527
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   528
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   529
    if (iFotaServer->iPackageState.iResult
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   530
            == RFotaEngineSession::EResDLFailDueToNWIssues)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   531
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   532
        notetype = EFwDLConnectionFailure;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   533
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   534
    else if (iFotaServer->iPackageState.iState == RFotaEngineSession::EDownloadProgressing &&
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   535
            iFotaServer->iPackageState.iResult == RFotaEngineSession::EResUndefinedError)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   536
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   537
        notetype = EFwDLGeneralFailure;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   538
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   539
    else if (iFotaServer->iPackageState.iResult == RFotaEngineSession::EResFailedSignatureAuthentication
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   540
            || iFotaServer->iPackageState.iResult == RFotaEngineSession::EResMalformedOrBadURL
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   541
            || iFotaServer->iPackageState.iResult == RFotaEngineSession::EResAlternateDLServerUnavailable
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   542
            || iFotaServer->iPackageState.iResult == RFotaEngineSession::EResInvalidDownloadDescriptor
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   543
            || iFotaServer->iPackageState.iResult == RFotaEngineSession::EResUndefinedError)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   544
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   545
        notetype = EFwDLNonResumableFailure;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   546
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   547
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   548
    TRAP(err, iFotaServer->FinalizeDownloadL());
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   549
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   550
    FLOG(_L("Finalized download, error = %d"), err);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   551
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   552
    if (notetype != -1)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   553
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   554
        TRAP_IGNORE(ShowDialogL((TFwUpdNoteTypes) notetype));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   555
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   556
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   557
    FLOG(_L("DownloadManagerClient::HandleDownloadEvent <<"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   558
    }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   559
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   560
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   561
//  Called by the download client when download is interrupted by fota.
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   562
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   563
void DownloadManagerClient::HandleClientInterrupt(Download::State dlstate,
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   564
        int err0)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   565
    {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   566
    FLOG(_L("DownloadManagerClient::HandleClientInterrupt, status = %d >>"),
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   567
            dlstate);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   568
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   569
    iDownloadSubmitted = EFalse;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   570
    iProgress = EFalse;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   571
    TInt notetype(-1);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   572
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   573
    if (iDownloadClient)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   574
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   575
        delete iDownloadClient;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   576
        iDownloadClient = NULL;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   577
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   578
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   579
    if (dlstate == Download::Cancelled || dlstate == Download::Failed)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   580
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   581
        if (err0 == UserCancelled)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   582
            {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   583
            iFotaServer->iPackageState.iState  = RFotaEngineSession::EDownloadFailed;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   584
            iFotaServer->iPackageState.iResult = RFotaEngineSession::EResUserCancelled;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   585
            notetype = EFwDLNonResumableFailure;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   586
            }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   587
        else if (err0 == NeedMoreMemory)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   588
            {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   589
            iFotaServer->iPackageState.iState = RFotaEngineSession::EDownloadProgressing;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   590
            iFotaServer->iPackageState.iResult= RFotaEngineSession::EResUserCancelled;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   591
            }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   592
        else if (err0 == InvalidContentType)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   593
            {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   594
            iFotaServer->iPackageState.iState = RFotaEngineSession::EDownloadFailed;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   595
            iFotaServer->iPackageState.iResult= RFotaEngineSession::EResContentMisMatch;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   596
            notetype = EFwDLNonResumableFailure;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   597
            }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   598
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   599
    else if (dlstate == Download::Paused)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   600
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   601
        if (err0 == UserCancelled)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   602
            {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   603
            iFotaServer->iPackageState.iState = RFotaEngineSession::EDownloadProgressing;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   604
            iFotaServer->iPackageState.iResult= RFotaEngineSession::EResUserCancelled;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   605
            
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   606
            iFotaServer->ServerCanShut(ETrue);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   607
            }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   608
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   609
    else
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   610
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   611
        FLOG(_L(" I DO NOT KNOW THIS!!"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   612
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   613
    TRAPD(err,
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   614
            iFotaServer->iDatabase->OpenDBL();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   615
            iFotaServer->iDatabase->SetStateL( iFotaServer->iPackageState, KNullDesC8, EFDBState|EFDBResult);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   616
            iFotaServer->iDatabase->CloseAndCommitDB();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   617
    );
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   618
    FLOG(_L("Updating fota database, error = %d"), err);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   619
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   620
    UninitDownloadMgr();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   621
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   622
    TRAP(err, iFotaServer->FinalizeDownloadL());
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   623
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   624
    FLOG(_L("Finalizing download, error = %d"), err);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   625
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   626
    if (notetype != -1)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   627
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   628
        TRAP_IGNORE(ShowDialogL((TFwUpdNoteTypes) notetype));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   629
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   630
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   631
    FLOG(_L("DownloadManagerClient::HandleClientInterrupt <<"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   632
    }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   633
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   634
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   635
//  Called to map the download error codes to fota result codes (FUMO result codes)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   636
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   637
void DownloadManagerClient::MapDownloadErrors(int err0)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   638
    {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   639
    FLOG(_L("DownloadManagerClient::MapDownloadErrors, err =  %d >>"), err0);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   640
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   641
    if (err0 >= ConnectionRefusedError && err0 <= UnknownNetworkError)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   642
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   643
        //Connection related error
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   644
        iFotaServer->iPackageState.iResult
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   645
                = RFotaEngineSession::EResAlternateDLServerUnavailable;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   646
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   647
    else if (err0 == ContentNotFoundError)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   648
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   649
        iFotaServer->iPackageState.iResult
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   650
                    = RFotaEngineSession::EResAlternateDLServerUnavailable;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   651
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   652
    else if (err0 >= ContentAccessDenied && err0 <= UnknownContentError)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   653
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   654
        //Content related error
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   655
        iFotaServer->iPackageState.iResult
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   656
                = RFotaEngineSession::EResUndefinedError;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   657
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   658
    else if (err0 >= ProtocolUnknownError && err0 <= ProtocolFailure)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   659
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   660
        //Protocol related error
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   661
        iFotaServer->iPackageState.iResult
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   662
                = RFotaEngineSession::EResUndefinedError;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   663
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   664
    else if (err0 >= ConnectionFailed && err0 <= TransactionFailed)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   665
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   666
        //No network coverage
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   667
        iFotaServer->iPackageState.iResult
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   668
                = RFotaEngineSession::EResDLFailDueToNWIssues;
73
hgs
parents: 51
diff changeset
   669
        }    
51
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   670
    else if (err0 == ObjectNotFound)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   671
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   672
        iFotaServer->iPackageState.iResult
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   673
                = RFotaEngineSession::EResAlternateDLServerUnavailable;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   674
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   675
    else if (err0 == BadUrl)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   676
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   677
        iFotaServer->iPackageState.iResult
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   678
                = RFotaEngineSession::EResMalformedOrBadURL;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   679
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   680
    else if (err0 == MediaRemoved)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   681
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   682
        iFotaServer->iPackageState.iResult
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   683
                = RFotaEngineSession::EResDLFailDueToDeviceOOM;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   684
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   685
    else if (err0 == DiskFull)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   686
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   687
        iFotaServer->iPackageState.iResult
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   688
                = RFotaEngineSession::EResDLFailDueToDeviceOOM;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   689
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   690
    else if (err0 == InvalidDownloadDescriptor)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   691
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   692
        iFotaServer->iPackageState.iResult
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   693
                = RFotaEngineSession::EResInvalidDownloadDescriptor;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   694
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   695
    else
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   696
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   697
        //Unknown failure reason
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   698
        iFotaServer->iPackageState.iResult
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   699
                = RFotaEngineSession::EResUndefinedError;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   700
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   701
    FLOG(_L("DownloadManagerClient::MapDownloadErrors, mapped fota failure reason = %d"), iFotaServer->iPackageState.iResult);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   702
    }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   703
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   704
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   705
//  Tells whether any download is active or not.
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   706
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   707
TBool DownloadManagerClient::IsDownloadActive()
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   708
    {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   709
    return (iDownloadSubmitted || iProgress);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   710
    }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   711
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   712
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   713
//  Returns the download manager instance pointer
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   714
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   715
DownloadManager* DownloadManagerClient::Manager()
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   716
    {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   717
    return iDownloadManager;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   718
    }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   719
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   720
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   721
//  Finds the suitable drive and folder for a download, given its size.
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   722
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   723
TFreeSpace DownloadManagerClient::GetSuitablePath(TInt aSize, QString& aPath)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   724
    {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   725
    TFreeSpace isavailable;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   726
    TInt swupdSize(0);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   727
    TInt dummySize(0);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   728
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   729
    SpaceAllocatedBySWUPDFiles(swupdSize, dummySize);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   730
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   731
    if (aSize <= dummySize)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   732
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   733
        // fits to reservation
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   734
        isavailable = EFitsToReservation;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   735
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   736
    else
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   737
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   738
        // doesnt fit to reservation, does it fit to filesystem?
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   739
        TInt sizeNeededFromFS = aSize - dummySize;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   740
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   741
        if (sizeNeededFromFS < 0)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   742
            sizeNeededFromFS = 0;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   743
        TBool critical(ETrue);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   744
        TRAP_IGNORE(critical = SysUtil::FFSSpaceBelowCriticalLevelL( &iFs, sizeNeededFromFS ));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   745
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   746
        if (critical)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   747
            {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   748
            // how much space would be needed
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   749
            TVolumeInfo vi;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   750
            iFs.Volume(vi, EDriveC);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   751
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   752
            TInt neededspace = sizeNeededFromFS - vi.iFree
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   753
                    + KSystemCriticalWorkingspace;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   754
            FLOG(_L("neededspace = %d vi.iFree = %d "), neededspace, vi.iFree);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   755
            FLOG(_L(" neededspace = sizeNeededFromFS - vi.iFree + KSystemCriticalWorkingspace;"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   756
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   757
            aSize = neededspace;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   758
            isavailable = EDoesntFitToFileSystem;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   759
            }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   760
        else
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   761
            {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   762
            isavailable = EFitsToFileSystem;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   763
            }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   764
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   765
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   766
    aPath = DefaultPath;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   767
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   768
    FLOG(_L("DownloadManagerClient::IsPackageStoreSizeAvailableL, isavailable = %d <<"), isavailable);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   769
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   770
    return isavailable;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   771
    }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   772
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   773
// ---------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   774
// DownloadManagerClient::GetUpdatePackageLocation
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   775
// Gets update package location, that is , path.
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   776
// ---------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   777
void DownloadManagerClient::GetUpdatePackageLocation(TDes& aPath)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   778
    {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   779
    FLOG(_L("DownloadManagerClient::GetUpdatePackageLocation >>"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   780
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   781
    TBuf<KMaxFileName> temp;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   782
    temp.Zero();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   783
    temp.Copy(KDefaultPath);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   784
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   785
    aPath.Zero();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   786
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   787
    if (iFotaServer->iPackageState.iState == RFotaEngineSession::EDownloadProgressing
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   788
            || iFotaServer->iPackageState.iState == RFotaEngineSession::EDownloadFailed)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   789
        temp.Append(KDownloadTempDir);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   790
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   791
    TPtrC name(reinterpret_cast<const unsigned short*> (PackageName.constData()));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   792
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   793
    temp.Append(name);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   794
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   795
    if (BaflUtils::FileExists(iFs, temp))
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   796
        aPath.Copy(temp);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   797
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   798
    FLOG(_L("DownloadManagerClient::GetUpdatePackageLocation <<"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   799
    }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   800
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   801
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   802
//  Gets the download package size
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   803
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   804
TInt DownloadManagerClient::GetDownloadPackageSize()
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   805
    {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   806
    FLOG(_L("DownloadManagerClient::GetDownloadPackageSize >>"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   807
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   808
    TInt size(0);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   809
    TBuf<KMaxFileName> temp;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   810
    temp.Zero();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   811
    temp.Copy(KDefaultPath);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   812
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   813
    if (iFotaServer->iPackageState.iState
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   814
            == RFotaEngineSession::EDownloadProgressing)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   815
        temp.Append(KDownloadTempDir);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   816
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   817
    TPtrC  name(reinterpret_cast<const unsigned short*> (PackageName.constData()));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   818
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   819
    temp.Append(name);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   820
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   821
    TEntry entry;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   822
    if (iFs.Entry(temp, entry) == KErrNone)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   823
        size = entry.iSize;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   824
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   825
    FLOG(_L("DownloadManagerClient::GetDownloadPackageSize, size = %d >>"),
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   826
            size);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   827
    return size;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   828
    }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   829
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   830
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   831
//  Gets the space allocated for the package and reserved memory 
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   832
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   833
void DownloadManagerClient::SpaceAllocatedBySWUPDFiles(TInt& aSwupdSize,
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   834
        TInt& aReservedSize)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   835
    {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   836
    // get sizes of swupd files
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   837
    aSwupdSize = GetDownloadPackageSize();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   838
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   839
    // get size of reserved file
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   840
    aReservedSize = 0;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   841
    TBuf<KMaxFileName> temp;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   842
    temp.Zero();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   843
    temp.Copy(KDefaultPath);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   844
    temp.Append(KReservedFileName);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   845
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   846
    TEntry entry;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   847
    if (iFs.Entry(temp, entry) == KErrNone)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   848
        aReservedSize = entry.iSize;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   849
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   850
    FLOG(_L("CFotaDiskStorage::SpaceAllocatedBySWUPDFilesL reserved:%d swupd:%d"), aReservedSize, aSwupdSize);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   851
    }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   852
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   853
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   854
//  Creates the disk reservation
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   855
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   856
void DownloadManagerClient::CreateDiskReservation()
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   857
    {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   858
    FLOG(_L("DownloadManagerClient::CreateDiskReservationL >>"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   859
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   860
    // Count size reserved by .swupd files
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   861
    // CDir*       list;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   862
    TInt err;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   863
    TInt swupdSize(0);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   864
    TInt dummySize(0);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   865
    RFile dummy;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   866
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   867
    SpaceAllocatedBySWUPDFiles(swupdSize, dummySize);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   868
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   869
    // Calculate space for dummy file
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   870
    TInt targetsize = iReservedSize - swupdSize;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   871
    if (targetsize < 0)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   872
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   873
        targetsize = 0;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   874
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   875
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   876
    // Reduce dummy file size 
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   877
    if (dummySize != targetsize || dummySize == 0)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   878
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   879
        FLOG(_L("   dummy new size %d (old %d)"), targetsize, dummySize);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   880
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   881
        err = dummy.Open(iFs, KReservedFileName, EFileWrite
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   882
                | EFileShareExclusive);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   883
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   884
        if (err == KErrNotFound)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   885
            {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   886
            dummy.Replace(iFs, KReservedFileName, EFileWrite
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   887
                    | EFileShareExclusive);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   888
            }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   889
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   890
        TInt err = KErrNone;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   891
        //Reservation logic - if 'x' bytes is not available, try x/2 to reserve. 
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   892
        //Trial would end if unable to save atleast 1MB.
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   893
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   894
        do {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   895
            FLOG(_L("Trying to reserve size: %d bytes..."), targetsize);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   896
            err = dummy.SetSize(targetsize);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   897
            if (err != KErrNoMemory)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   898
                break;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   899
            targetsize = targetsize / 2;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   900
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   901
            if (targetsize < 1024 * 1024) //Don't reserver anything lesser than 1MB
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   902
                break;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   903
            }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   904
        while (err == KErrNoMemory);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   905
        dummy.Close();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   906
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   907
        if (err == KErrNone)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   908
            {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   909
            FLOG(_L("Successfully created reservation of size: %d bytes"),
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   910
                    targetsize);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   911
            }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   912
        else
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   913
            {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   914
            FLOG(_L("Error %d while creating reserved of size:  %d bytes"),
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   915
                    err, targetsize);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   916
            }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   917
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   918
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   919
    FLOG(_L("DownloadManagerClient::CreateDiskReservationL <<"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   920
    }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   921
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   922
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   923
//  Deletes the disk reservation in the specified path
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   924
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   925
void DownloadManagerClient::DeleteDiskReservation(QString& path)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   926
    {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   927
    FLOG(_L("DownloadManagerClient::DeleteDiskReservation >>"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   928
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   929
    RFile file;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   930
    TBuf<KMaxFileName> temp;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   931
    temp.Zero();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   932
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   933
    TPtrC spath(reinterpret_cast<const unsigned short*> (path.constData()));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   934
    temp.Copy(spath);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   935
    temp.Append(KReservedFileName);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   936
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   937
    TInt err = file.Open(iFs, temp, EFileWrite | EFileShareExclusive);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   938
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   939
    if (!err)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   940
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   941
        FLOG(_L("Removing the reserved memory as download has started"),
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   942
                iReservedSize);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   943
        file.SetSize(KErrNone);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   944
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   945
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   946
    file.Close();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   947
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   948
    FLOG(_L("DownloadManagerClient::DeleteDiskReservation <<"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   949
    }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   950
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   951
// ---------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   952
// DownloadManagerClient::DeleteUpdatePackageL 
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   953
// ---------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   954
void DownloadManagerClient::DeleteUpdatePackageL()
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   955
    {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   956
    FLOG(_L("DownloadManagerClient::DeleteUpdatePackageL >>"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   957
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   958
    CDir*       list;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   959
   
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   960
    // get sizes of swupd files
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   961
    TInt err = iFs.GetDir (KPackageExtensionAll, KEntryAttNormal ,ESortByName, list );
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   962
    if (err == KErrNone)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   963
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   964
        CleanupStack::PushL ( list );
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   965
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   966
        for(int i=0; i<list->Count() ;++i )
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   967
            {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   968
            TEntry t = (*list)[i];
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   969
            iFs.Delete(t.iName);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   970
            FLOG(_L("Deleted: %S"), &t.iName);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   971
            }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   972
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   973
        CleanupStack::PopAndDestroy( list );        
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   974
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   975
    
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   976
    TBuf<KMaxFileName> temp;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   977
    temp.Copy(KDefaultPath);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   978
    temp.Append(KDownloadTempDir);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   979
    temp.Append(KPackageExtensionAll);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   980
    
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   981
    err = iFs.GetDir (temp, KEntryAttNormal ,ESortByName, list );
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   982
    
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   983
    if (err == KErrNone)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   984
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   985
        CleanupStack::PushL ( list );
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   986
        TBuf<KMaxFileName> temp;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   987
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   988
        for(int i=0; i<list->Count() ;++i )
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   989
            {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   990
            TEntry t = (*list)[i];
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   991
            temp.Copy(KDefaultPath);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   992
            temp.Append(KDownloadTempDir);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   993
            temp.Append(t.iName);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   994
            iFs.Delete(temp);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   995
            FLOG(_L("Deleted: %S"), &temp);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   996
            }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   997
        
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   998
        CleanupStack::PopAndDestroy( list );
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   999
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1000
    
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1001
    CreateDiskReservation();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1002
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1003
    FLOG(_L("DownloadManagerClient::DeleteUpdatePackageL<<"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1004
    }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1005
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1006
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1007
//  Called to show any update specific dialogs
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1008
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1009
void DownloadManagerClient::ShowDialogL(TFwUpdNoteTypes adialogid,
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1010
        TInt aValue)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1011
    {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1012
    FLOG(_L("DownloadManagerClient::ShowDialog, dialogid = %d >>"), adialogid);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1013
    iFotaServer->ServerCanShut(EFalse);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1014
    if (iFotaServer->FullScreenDialog())
73
hgs
parents: 51
diff changeset
  1015
        iFotaServer->FullScreenDialog()->close();
51
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1016
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1017
    if (iFotaServer->iPackageState.iSessionType && adialogid
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1018
            != EFwDLNeedMoreMemory)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1019
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1020
        FLOG(_L("Differing showing dialog as session is silent."));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1021
        return;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1022
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1023
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1024
    iNotifParams = CHbSymbianVariantMap::NewL();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1025
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1026
    HBufC* keyDialog = HBufC::NewL(10);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1027
    CleanupStack::PushL(keyDialog);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1028
    *keyDialog = KKeyDialog;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1029
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1030
    HBufC* keyParam1 = HBufC::NewL(10);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1031
    CleanupStack::PushL(keyParam1);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1032
    *keyParam1 = KKeyParam1;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1033
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1034
    //adialogid = EFwUpdResumeUpdate;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1035
    CHbSymbianVariant* dialogId = CHbSymbianVariant::NewL(&adialogid,
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1036
            CHbSymbianVariant::EInt);
73
hgs
parents: 51
diff changeset
  1037
    //CleanupStack::PushL(dialogId);
51
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1038
    iNotifParams->Add(*keyDialog, dialogId);
73
hgs
parents: 51
diff changeset
  1039
    
51
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1040
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1041
    switch (adialogid)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1042
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1043
        case EFwDLNeedMoreMemory: //For Flexible memory
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1044
            {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1045
            //TFwUpdNoteTypes aType = EFwDLNeedMoreMemory;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1046
            CHbSymbianVariant* param1Val = CHbSymbianVariant::NewL(&aValue,
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1047
                    CHbSymbianVariant::EInt);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1048
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1049
            iNotifParams->Add(*keyParam1, param1Val);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1050
            iNotifier->LaunchNotifierL(iNotifParams, adialogid);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1051
            }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1052
            break;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1053
        case EFwDLConnectionFailure:
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1054
            {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1055
            iNotifier->LaunchNotifierL(iNotifParams, adialogid);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1056
            }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1057
            break;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1058
        case EFwDLGeneralFailure:
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1059
            {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1060
            iNotifier->LaunchNotifierL(iNotifParams, adialogid);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1061
            }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1062
            break;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1063
        case EFwDLNonResumableFailure:
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1064
             {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1065
             iNotifier->LaunchNotifierL(iNotifParams, adialogid);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1066
             }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1067
            break;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1068
        default:
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1069
            {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1070
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1071
            }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1072
            break;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1073
        }
73
hgs
parents: 51
diff changeset
  1074
    CleanupStack::PopAndDestroy(2);
51
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1075
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1076
    FLOG(_L("DownloadManagerClient::ShowDialog <<"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1077
    }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1078
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1079
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1080
//  The call back when update specific dialog receives an user response
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1081
// --------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1082
void DownloadManagerClient::HandleDialogResponse(int response, TInt aDialogId)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1083
    {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1084
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1085
    FLOG(_L("DownloadManagerClient::HandleDialogResponse, response = %d, aDialogid = %d >>"), response, aDialogId);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1086
    //TInt dialogID;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1087
    //const CHbSymbianVariant* dialogId = iNotifParams->Get(KKeyDialog);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1088
    //dialogID = *(TFwUpdNoteTypes *)dialogId->Value<TInt>();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1089
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1090
    switch (aDialogId)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1091
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1092
        case EFwDLNeedMoreMemory: //For Flexible memory
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1093
            {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1094
            if (response == EHbLSK) //LSK
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1095
                {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1096
                iDownloadClient->Restart();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1097
                }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1098
            else //End key
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1099
                {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1100
                iDownloadClient->Cancel(NeedMoreMemory);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1101
                }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1102
            }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1103
            break;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1104
        case EFwDLConnectionFailure:
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1105
        case EFwDLGeneralFailure:
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1106
        case EFwDLNonResumableFailure:
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1107
            {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1108
            iFotaServer->ServerCanShut(ETrue);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1109
            }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1110
            break;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1111
        default:
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1112
            {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1113
            iFotaServer->ServerCanShut(ETrue);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1114
            }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1115
            break;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1116
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1117
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1118
    FLOG(_L("DownloadManagerClient::HandleDialogResponse <<\n"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1119
    }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1120
2e64dc50f295 201025_02
hgs
parents:
diff changeset
  1121
//End of file