applicationmanagement/server/src/amstorage.cpp
author hgs
Fri, 15 Oct 2010 11:39:02 +0530
changeset 67 fdbfe0a95492
parent 62 03849bd79877
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
47
d316aecb87fd 201025_02
hgs
parents:
diff changeset
     1
/*
d316aecb87fd 201025_02
hgs
parents:
diff changeset
     2
 * Copyright (c) 2000 Nokia Corporation and/or its subsidiary(-ies). 
d316aecb87fd 201025_02
hgs
parents:
diff changeset
     3
 * All rights reserved.
d316aecb87fd 201025_02
hgs
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
d316aecb87fd 201025_02
hgs
parents:
diff changeset
     5
 * under the terms of "Eclipse Public License v1.0"
d316aecb87fd 201025_02
hgs
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
d316aecb87fd 201025_02
hgs
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
d316aecb87fd 201025_02
hgs
parents:
diff changeset
     8
 *
d316aecb87fd 201025_02
hgs
parents:
diff changeset
     9
 * Initial Contributors:
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    11
 *
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    12
 * Contributors:
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    13
 *
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    14
 * Description: Implementation of applicationmanagement components
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    15
 *
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    16
 */
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    17
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    18
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    19
#include <centralrepository.h>
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    20
#include <s32mem.h>
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    21
#include <s32file.h>
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    22
#include <e32des8.h>
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    23
#ifndef __SERIES60_30__
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    24
#include "AMAppHideUtil.h"
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    25
#endif
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    26
#include "debug.h"
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    27
#include "amprivateCRKeys.h"
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    28
#include "amstorage.h"
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    29
#include "AMDeploymentComponent.h"
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    30
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    31
using namespace NApplicationManagement;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    32
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    33
// CONSTANTS
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    34
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    35
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    36
/***************************************************
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    37
 // RComponentIdArray
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    38
 ***************************************************/
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    39
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    40
void RComponentIdArray::SetListL(const TDesC8& aChilds)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    41
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    42
#ifdef _DEBUG
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    43
    HBufC *b = HBufC::NewLC(aChilds.Length() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    44
    TPtr p(b->Des() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    45
    p.Copy(aChilds);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    46
    RDEBUG_2( "RComponentIdArray::SetListL: Setting list from: '%S'", &p);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    47
    CleanupStack::PopAndDestroy(b);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    48
#endif
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    49
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    50
    RDesReadStream buf(aChilds);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    51
    //TInt size( buf.Source()->TellL( MStreamBuf::ERead ).SizeL() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    52
    TInt left(aChilds.Length() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    53
    const TInt KSize(sizeof(TUint32));
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    54
    while (left > 0)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    55
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    56
        TUint32 val(buf.ReadUint32L() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    57
#ifdef _DEBUG
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    58
        RDEBUG_2( "RComponentIdArray::SetListL: Appending id: '%d'", val);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    59
#endif
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    60
        Append(val);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    61
        left -= KSize;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    62
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    63
    buf.Close();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    64
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    65
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    66
void RComponentIdArray::RemoveByValue(TUint32 aValue)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    67
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    68
    TInt ind(Find(aValue) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    69
    Remove(ind);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    70
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    71
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    72
void RComponentIdArray::GetListLC(HBufC8 *&aChilds, TInt &aLength)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    73
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    74
    ASSERT( aChilds == NULL );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    75
    TInt c(Count() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    76
    if (c > 0)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    77
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    78
        aLength = c * sizeof(TUint32);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    79
        aChilds = HBufC8::NewLC(aLength);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    80
        TPtr8 p(aChilds->Des() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    81
        RDesWriteStream stream(p);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    82
        CleanupClosePushL(stream);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    83
        TInt i( 0);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    84
        do
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    85
            {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    86
            stream.WriteUint32L(operator[](i) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    87
            }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    88
        while ( ++i < c);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    89
        stream.CommitL();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    90
        CleanupStack::PopAndDestroy( &stream);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    91
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    92
    else
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    93
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    94
        aChilds = KNullDesC8().AllocLC();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    95
        aLength = 0;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    96
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    97
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    98
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    99
/*	
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   100
 void TCertInfoPckg::ExternalizeL(RWriteStream& aStream) const
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   101
 {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   102
 aStream << iId;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   103
 TPckgBuf<TCertInfo>::ExternalizeL( aStream );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   104
 }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   105
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   106
 void TCertInfoPckg::InternalizeL(RReadStream& aStream)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   107
 {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   108
 
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   109
 }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   110
 */
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   111
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   112
void RCertArray::ExternalizeL(RWriteStream& aStream) const
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   113
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   114
    TInt c(Count() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   115
    aStream.WriteInt32L(c);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   116
    for (TInt i( 0); i < c; i++)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   117
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   118
        aStream.WriteInt32L(i);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   119
        aStream << (*(operator[](i)));
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   120
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   121
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   122
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   123
void RCertArray::InternalizeL(RReadStream& aStream)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   124
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   125
    TInt c(aStream.ReadInt32L() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   126
    for (TInt i( 0); i < c; i++)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   127
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   128
        TCertInfoPckg *pkg = new ( ELeave ) TCertInfoPckg;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   129
        RDEBUG_2( "RCertArray::InternalizeL - allocated TCertInfoPckg 0x%X", reinterpret_cast<TUint>( pkg ) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   130
        CleanupStack::PushL(pkg);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   131
        TInt idx(aStream.ReadInt32L() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   132
        aStream >> (*pkg);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   133
        Append(pkg);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   134
        CleanupStack::Pop(pkg);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   135
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   136
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   137
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   138
TInt RCertArray::FindByValue(const TCertInfoPckg &aPckg)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   139
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   140
    TInt c(Count() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   141
    for (TInt i( 0); i < c; i++)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   142
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   143
        if (operator[](i)->Compare(aPckg) == 0)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   144
            {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   145
            return i;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   146
            }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   147
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   148
    return KErrNotFound;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   149
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   150
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   151
/***************************************************
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   152
 // CDeliveryComponentStorage
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   153
 ***************************************************/
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   154
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   155
CDeliveryComponentStorage::CDeliveryComponentStorage()
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   156
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   157
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   158
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   159
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   160
void CDeliveryComponentStorage::ConstructL()
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   161
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   162
#ifndef __SERIES60_30__
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   163
    iHidder = CAMAppHideUtil::NewL();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   164
#endif
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   165
    LoadCertsL();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   166
    TRAPD( erx, iRepository = CRepository::NewL ( KCRUidPrivateApplicationManagementKeys ) )
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   167
    ;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   168
    if (erx != KErrNone)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   169
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   170
        RDEBUG_2( "CDeliveryComponentStorage::ConstructL() ERROR CentRep not initialized: Check deployment! %d", erx );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   171
        User::Leave(erx);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   172
        }
67
hgs
parents: 62
diff changeset
   173
     
47
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   174
    TInt err(iRepository->Get(KNextIdKey, iNextId) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   175
    if (err == KErrNotFound)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   176
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   177
        iNextId = KMinIdValue;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   178
        User::LeaveIfError(iRepository->Create(KNextIdKey, iNextId) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   179
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   180
    else
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   181
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   182
        User::LeaveIfError(err);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   183
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   184
    LoadComponentsL();
67
hgs
parents: 62
diff changeset
   185
    
47
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   186
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   187
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   188
void CDeliveryComponentStorage::LoadCertsL()
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   189
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   190
    RFs fs;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   191
    User::LeaveIfError(fs.Connect() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   192
    CleanupClosePushL(fs);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   193
    TInt e(fs.CreatePrivatePath(KDefaultDrive) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   194
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   195
    User::LeaveIfError(e);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   196
    TBuf<64> privatePath;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   197
    User::LeaveIfError(fs.PrivatePath(privatePath) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   198
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   199
    TInt privPathLength(privatePath.Length() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   200
    _LIT( KCertFile, "amcerts.dat");
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   201
    HBufC *afile = HBufC::NewLC(privPathLength + KCertFile().Length());
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   202
    *afile = privatePath;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   203
    afile->Des().Append(KCertFile);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   204
    RFileReadStream certFile;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   205
    TInt err(certFile.Open(fs, *afile, EFileRead) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   206
    if (err == KErrNone)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   207
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   208
        CleanupClosePushL(certFile);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   209
        iCertificates.InternalizeL(certFile);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   210
        CleanupStack::PopAndDestroy( &certFile);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   211
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   212
    else
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   213
        if (err == KErrNotFound)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   214
            {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   215
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   216
            }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   217
        else
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   218
            {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   219
            User::Leave(err);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   220
            }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   221
    CleanupStack::PopAndDestroy(afile);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   222
    CleanupStack::PopAndDestroy( &fs);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   223
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   224
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   225
CDeliveryComponentStorage* CDeliveryComponentStorage::NewLC()
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   226
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   227
    CDeliveryComponentStorage *self = new ( ELeave ) CDeliveryComponentStorage( );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   228
    CleanupStack::PushL(self) ;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   229
    self->ConstructL() ;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   230
    return self;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   231
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   232
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   233
CDeliveryComponentStorage* CDeliveryComponentStorage::NewL()
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   234
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   235
    CDeliveryComponentStorage *self = NewLC();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   236
    CleanupStack::Pop(self) ;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   237
    return self;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   238
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   239
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   240
TInt CDeliveryComponentStorage::NextKey()
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   241
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   242
    TInt oldNext(iNextId++);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   243
    iRepository->Set(KNextIdKey, iNextId);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   244
    return oldNext;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   245
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   246
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   247
CDeliveryComponentStorage::~CDeliveryComponentStorage()
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   248
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   249
    RDEBUG_3( "CDeliveryComponentStorage::~CDeliveryComponentStorage 0x%X - 0x%X", reinterpret_cast<TUint>(this),
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   250
            reinterpret_cast<TUint>(this)+sizeof( CDeliveryComponentStorage ) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   251
    delete iRepository;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   252
    iRepository = NULL;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   253
    iComponents.ResetAndDestroy();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   254
    iComponentIds.Close();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   255
    TRAPD( err,CloseCertificatesL() )
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   256
    ;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   257
    if (err != KErrNone)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   258
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   259
        RDEBUG_2( "CDeliveryComponentStorage::~CDeliveryComponentStorage: ERROR Failed to close certificate storage properly: %d", err);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   260
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   261
#ifndef __SERIES60_30__
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   262
    delete iHidder;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   263
    iHidder = NULL;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   264
#endif
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   265
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   266
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   267
void CDeliveryComponentStorage::CloseCertificatesL()
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   268
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   269
    RFs fs;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   270
    User::LeaveIfError(fs.Connect() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   271
    CleanupClosePushL(fs);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   272
    TInt e(fs.CreatePrivatePath(KDefaultDrive) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   273
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   274
    User::LeaveIfError(e);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   275
    TBuf<64> privatePath;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   276
    User::LeaveIfError(fs.PrivatePath(privatePath) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   277
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   278
    TInt privPathLength(privatePath.Length() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   279
    _LIT( KCertFile, "amcerts.dat");
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   280
    HBufC *afile = HBufC::NewLC(privPathLength + KCertFile().Length());
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   281
    *afile = privatePath;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   282
    afile->Des().Append(KCertFile);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   283
    RFileWriteStream certFile;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   284
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   285
    TInt err(certFile.Replace(fs, *afile, EFileWrite) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   286
    if (err == KErrNone)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   287
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   288
        CleanupClosePushL(certFile);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   289
        iCertificates.ExternalizeL(certFile);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   290
        CleanupStack::PopAndDestroy( &certFile);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   291
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   292
    else
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   293
        if (err == KErrNotFound)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   294
            {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   295
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   296
            }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   297
        else
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   298
            {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   299
            User::Leave(err);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   300
            }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   301
    CleanupStack::PopAndDestroy(afile);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   302
    CleanupStack::PopAndDestroy( &fs);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   303
    iCertificates.ResetAndDestroy();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   304
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   305
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   306
const RComponentIdArray &CDeliveryComponentStorage::GetComponentIds() const
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   307
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   308
    return iComponentIds;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   309
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   310
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   311
void CDeliveryComponentStorage::GetStateChangeComponentIdsL(
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   312
        RComponentIdArray &aArray)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   313
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   314
    RDEBUG_2( "CDeliveryComponentStorage::GetStateChangeComponentIdsL %d dcs", iComponentIds.Count());
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   315
    aArray.Reset();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   316
    TInt c(iComponentIds.Count() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   317
    for (TInt i( 0); i < c; i++)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   318
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   319
        CDeploymentComponent &compo = ComponentL(iComponentIds[i]);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   320
        if (compo.OldState() != EDCSNone)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   321
            {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   322
            aArray.Append(iComponentIds[i]);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   323
            }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   324
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   325
    RDEBUG( "CDeliveryComponentStorage::GetStateChangeComponentIdsL end");
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   326
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   327
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   328
void CDeliveryComponentStorage::StateChangedL(TUint32 aInternalId)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   329
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   330
    RDEBUG_2( "CDeliveryComponentStorage::StateChangedL id %d", aInternalId);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   331
    CDeploymentComponent &compo = ComponentL(aInternalId);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   332
    compo.StateChangeComplete();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   333
    UpdateL(compo);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   334
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   335
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   336
void CDeliveryComponentStorage::LoadComponentsL()
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   337
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   338
    TInt length( 0);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   339
    TInt err(iRepository->Get(KIdListLengthKey, length) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   340
    if (err == KErrNotFound)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   341
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   342
        length = 0;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   343
        User::LeaveIfError(iRepository->Create(KIdListLengthKey, length) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   344
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   345
    else
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   346
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   347
        User::LeaveIfError(err);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   348
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   349
    HBufC8 *listbuf = HBufC8::NewLC(length) ;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   350
    TPtr8 ptr(listbuf->Des() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   351
    err = iRepository->Get(KIdListKey, ptr) ;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   352
    if (err == KErrNotFound)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   353
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   354
        err = iRepository->Create(KIdListKey, KNullDesC8);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   355
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   356
    else
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   357
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   358
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   359
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   360
    User::LeaveIfError(err);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   361
    TRAPD(code, iComponentIds.SetListL( ptr ))
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   362
    ;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   363
    if (code != KErrEof)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   364
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   365
        User::LeaveIfError(code);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   366
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   367
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   368
    CleanupStack::PopAndDestroy(listbuf);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   369
#ifndef __SERIES60_30__
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   370
    TInt i(iComponentIds.Count() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   371
    //iHidder->Reset();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   372
    while ( --i >= 0)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   373
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   374
        CDeploymentComponent &comp = ComponentL(iComponentIds[i]);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   375
        if (comp.State() == EDCSInactive)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   376
            {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   377
            iHidder->AddUidL(comp.Uid());
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   378
            }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   379
        else
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   380
            if (comp.State() == EDCSActive)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   381
                {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   382
                iHidder->RemoveUidL(comp.Uid() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   383
                }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   384
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   385
    iHidder->PersistUidsL();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   386
#endif
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   387
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   388
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   389
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   390
CDeploymentComponent *CDeliveryComponentStorage::NewComponentL(
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   391
        const TDeploymentComponentState &aState, const TDCUserId &aUserId,
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   392
        const TCertInfo *aCertInfo/* = NULL */)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   393
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   394
    CDeploymentComponent *newc = CDeploymentComponent::NewLC(NextKey(),
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   395
            aUserId);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   396
    if (aCertInfo != NULL)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   397
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   398
        TCertInfoPckg *p = new( ELeave ) TCertInfoPckg(*aCertInfo);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   399
        RDEBUG_2( "CDeliveryComponentStorage::NewComponentL - allocated TCertInfoPckg 0x%X", reinterpret_cast<TUint>( p ) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   400
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   401
        TInt idx(iCertificates.FindByValue(*p) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   402
        if (idx == KErrNotFound)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   403
            {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   404
            RDEBUG_2( "CDeliveryComponentStorage::NewComponentL - TCertInfoPckg NOT found 0x%X", reinterpret_cast<TUint>( p ) );
62
hgs
parents: 47
diff changeset
   405
            TRAPD(err,iCertificates.AppendL(p));
hgs
parents: 47
diff changeset
   406
            if(err != KErrNone)
hgs
parents: 47
diff changeset
   407
                {
hgs
parents: 47
diff changeset
   408
                delete p;
hgs
parents: 47
diff changeset
   409
                p = NULL;
hgs
parents: 47
diff changeset
   410
				User::Leave( err );
hgs
parents: 47
diff changeset
   411
                }
hgs
parents: 47
diff changeset
   412
            else
hgs
parents: 47
diff changeset
   413
                {
hgs
parents: 47
diff changeset
   414
                idx = iCertificates.Count() - 1;
hgs
parents: 47
diff changeset
   415
                }
47
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   416
            }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   417
        else
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   418
            {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   419
            RDEBUG_2( "CDeliveryComponentStorage::NewComponentL - TCertInfoPckg found at %d, deleting temporary", idx );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   420
            delete p;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   421
            p = NULL;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   422
            }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   423
        if (idx >= 0)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   424
            {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   425
            RDEBUG_2( "CDeliveryComponentStorage::NewComponentL - TCertInfoPckg found 0x%X", reinterpret_cast<TUint>( p ) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   426
            newc->SetOwner(idx);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   427
            }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   428
        else
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   429
            {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   430
            RDEBUG_3( "CDeliveryComponentStorage::NewComponentL - WARNING Could not add certificate 0x%X: %d", reinterpret_cast<TUint>( p ), idx );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   431
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   432
            }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   433
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   434
    newc->SetState(aState);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   435
    newc->SetStatusNode(EIdle);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   436
    UpdateL( *newc);
62
hgs
parents: 47
diff changeset
   437
    iComponents.AppendL(newc);
hgs
parents: 47
diff changeset
   438
    iComponentIds.AppendL(newc->InternalId() );
47
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   439
RDEBUG_2( "CDeliveryComponentStorage::NewComponentL -Internal ID is  %d, ", newc->InternalId() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   440
    PersistStateL();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   441
    CleanupStack::Pop(newc);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   442
    return newc;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   443
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   444
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   445
void CDeliveryComponentStorage::UpdateL(
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   446
        const CDeploymentComponent &aComponent)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   447
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   448
    aComponent.PersistL( *iRepository) ;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   449
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   450
#ifndef __SERIES60_30__
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   451
    if (aComponent.State() == EDCSInactive)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   452
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   453
        iHidder->AddUidL(aComponent.Uid(), ETrue);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   454
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   455
    else
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   456
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   457
        iHidder->RemoveUidL(aComponent.Uid(), ETrue);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   458
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   459
#endif
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   460
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   461
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   462
void CDeliveryComponentStorage::PersistStateL()
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   463
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   464
    TInt length( 0);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   465
    HBufC8 *buf= NULL;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   466
    iComponentIds.GetListLC(buf, length);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   467
    User::LeaveIfError(iRepository->Set(KIdListLengthKey, length) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   468
    User::LeaveIfError(iRepository->Set(KIdListKey, *buf) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   469
    CleanupStack::PopAndDestroy(buf);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   470
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   471
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   472
void CDeliveryComponentStorage::RemoveL(TUint32 aInternalId)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   473
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   474
    RDEBUG_2("CDeliveryComponentStorage::RemoveL - Remove id: (%d)", aInternalId );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   475
    TInt count(iComponents.Count() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   476
    for (TInt i( 0); i < count; i++)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   477
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   478
        CDeploymentComponent *el = iComponents[i];
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   479
        if (aInternalId == el->iInternalId)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   480
            {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   481
#ifndef __SERIES60_30__
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   482
            iHidder->RemoveUidL(el->Uid(), ETrue);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   483
#endif
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   484
            iComponents.Remove(i);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   485
            iComponentIds.RemoveByValue(aInternalId);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   486
            el->DestroyL( *iRepository);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   487
            delete el;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   488
            RDEBUG_2("CDeliveryComponentStorage::RemoveL - Removed id: (%d)", aInternalId );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   489
            PersistStateL();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   490
            break;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   491
            }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   492
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   493
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   494
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   495
CDeploymentComponent &CDeliveryComponentStorage::ComponentL(
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   496
        TUint32 aInternalId)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   497
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   498
    CDeploymentComponent *resp= NULL;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   499
    TInt count(iComponents.Count() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   500
    for (TInt i( 0); i < count; i++)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   501
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   502
        CDeploymentComponent *el = iComponents[i];
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   503
        if (aInternalId == el->iInternalId)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   504
            {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   505
            resp = el;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   506
            break;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   507
            }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   508
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   509
    if (resp == NULL)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   510
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   511
        TBuf8< NCentralRepositoryConstants::KMaxBinaryLength> buf;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   512
        TInt err(iRepository->Get(aInternalId, buf) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   513
        User::LeaveIfError(err) ;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   514
        resp = LoadComponentL(aInternalId, buf) ;
62
hgs
parents: 47
diff changeset
   515
        iComponents.AppendL(resp);
47
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   516
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   517
    if (resp == NULL)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   518
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   519
        User::Leave(KErrNotFound);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   520
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   521
    return *resp;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   522
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   523
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   524
CDeploymentComponent *CDeliveryComponentStorage::LoadComponentL(
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   525
        TInt aInternalId, const TDesC8 &aBuffer) const
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   526
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   527
    CDeploymentComponent *res = CDeploymentComponent::LoadL(aInternalId,
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   528
            aBuffer);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   529
#ifdef _DEBUG
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   530
    if (res)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   531
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   532
        RDEBUG8_4( "CDeliveryComponentStorage::LoadComponentL - loaded component state %d, internalid %d, and userid: %S", res->State(), res->InternalId(),&res->UserId() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   533
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   534
    else
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   535
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   536
        RDEBUG( "CDeliveryComponentStorage::LoadComponentL - WARNING failed to load component" );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   537
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   538
#endif
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   539
    return res;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   540
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   541
void CDeliveryComponentStorage::CheckForDuplicateNodesInDeployedL(
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   542
        CDeploymentComponent &aComponent)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   543
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   544
    TInt CompIdsCount(iComponentIds.Count() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   545
    RDEBUG8_2("CheckForDuplicateNodesInDeployedL: CompIdsCount-> (%d)", CompIdsCount );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   546
    RDEBUG8_2("CheckForDuplicateNodesInDeployedL: aComponent UserID is %S", &(aComponent.UserId()));
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   547
    for (TInt i( 0); i < CompIdsCount; i++)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   548
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   549
        CDeploymentComponent &compo = ComponentL(iComponentIds[i]);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   550
        RDEBUG8_2("CheckForDuplicateNodesInDeployedL: compo UserID is %S", &(compo.UserId()));
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   551
        if (&aComponent != &compo)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   552
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   553
        if (((compo.State()== EDCSActive) || (compo.State()== EDCSInactive))
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   554
                &&(compo.UserId() == aComponent.UserId()))
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   555
            {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   556
            (aComponent.iUserId).Append(*IntToDes8LC(aComponent.iInternalId));
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   557
            CleanupStack::PopAndDestroy();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   558
            break;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   559
            }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   560
          }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   561
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   562
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   563
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   564
HBufC8* CDeliveryComponentStorage::IntToDes8LC(const TInt aLuid)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   565
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   566
    HBufC8* buf = HBufC8::NewLC( 10); //10 = max length of 32bit integer
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   567
    TPtr8 ptrBuf = buf->Des();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   568
    ptrBuf.Num(aLuid);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   569
    return buf;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   570
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   571
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   572
void CDeliveryComponentStorage::InstalledL(CDeploymentComponent &aComponent)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   573
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   574
    CheckForDuplicateNodesInDeployedL(aComponent);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   575
    aComponent.SetState(EDCSActive);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   576
    // set state to IDLE 
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   577
    aComponent.SetStatusNode(EIdle);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   578
    UpdateL(aComponent);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   579
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   580
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   581
void CDeliveryComponentStorage::DeactivateL(CDeploymentComponent &aComponent)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   582
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   583
    /* :
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   584
     * set state to InActivate in progress
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   585
     * use TRAP instead of leaving.
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   586
     */
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   587
    aComponent.SetStatusNode(EDeployed_DeactivateProgress);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   588
    //User::LeaveIfError(aComponent.SetState(EDCSInactive) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   589
    TInt err = aComponent.SetState(EDCSInactive);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   590
    if (err == KErrNone)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   591
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   592
        TRAP(err,UpdateL(aComponent));
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   593
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   594
    //UpdateL(aComponent);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   595
    /*:
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   596
     * if error set state to InActivate failed or else set to Idle
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   597
     * call userleaveiferror()
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   598
     */
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   599
    if (err == KErrNone)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   600
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   601
        aComponent.SetStatusNode(EIdle);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   602
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   603
    else
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   604
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   605
        aComponent.SetStatusNode(EDeployed_DeactivateFailed);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   606
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   607
    User::LeaveIfError(err);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   608
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   609
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   610
void CDeliveryComponentStorage::SetDeploymentComponentState(CDeploymentComponent &aComponent,TDeploymentComponentState aState)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   611
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   612
    aComponent.SetState( aState );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   613
    TRAP_IGNORE(UpdateL( aComponent ));    
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   614
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   615
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   616
void CDeliveryComponentStorage::ActivateL(CDeploymentComponent &aComponent)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   617
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   618
    /* :
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   619
     * set state to Activate in progress
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   620
     * use TRAP instead of leaving.
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   621
     */
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   622
    aComponent.SetStatusNode(EDeployed_ActivateProgress);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   623
    TInt err = aComponent.SetState(EDCSActive);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   624
    //UpdateL( aComponent );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   625
    if (err == KErrNone)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   626
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   627
        TRAP(err,UpdateL(aComponent));
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   628
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   629
    /*:
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   630
     * if error set state to InActivate failed or else set to Idle
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   631
     * call userleaveiferror()
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   632
     */
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   633
    if (err == KErrNone)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   634
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   635
        aComponent.SetStatusNode(EIdle);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   636
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   637
    else
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   638
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   639
        aComponent.SetStatusNode(EDeployed_ActivateFailed);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   640
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   641
    User::LeaveIfError(err);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   642
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   643
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   644
/*void CDeliveryComponentStorage::UninstalledL( CDeploymentComponent &aComponent )
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   645
 {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   646
 aComponent.SetState( EDCSInactive );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   647
 UpdateL( aComponent );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   648
 }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   649
 
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   650
 void CDeliveryComponentStorage::ResetL()
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   651
 {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   652
 }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   653
 */
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   654
//  End of File