applicationmanagement/server/src/AMDeploymentComponentData.cpp
author hgs
Fri, 15 Oct 2010 11:39:02 +0530
changeset 67 fdbfe0a95492
parent 47 d316aecb87fd
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
#include <bautils.h>
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    19
#include <DRMLicenseManager.h>
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    20
#include <pathinfo.h>
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    21
#include <zipfilemember.h>
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    22
#include "amdeploymentcomponentdata.h"
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    23
#include "debug.h"
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    24
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    25
_LIT8( KSisxMimeType, "x-epoc/x-sisx-app" );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    26
_LIT( KTempDir, "piptemp\\" );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    27
_LIT8( KPipMimeType, "application/x-pip" );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    28
_LIT8( KDrmMessageMimeType, "application/vnd.oma.drm.message" );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    29
_LIT8( KDrmContentMimeType, "application/vnd.oma.drm.content" );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    30
_LIT8( KSisMimeType, "application/vnd.symbian.install");
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    31
_LIT8( KJadMIMEType, "text/vnd.sun.j2me.app-descriptor" );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    32
_LIT8( KJarMIMEType, "application/java-archive" );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    33
_LIT8( KJavaMIMEType, "application/java" );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    34
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    35
using namespace NApplicationManagement;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    36
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    37
/**
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    38
 *  Data class to Data access
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    39
 */
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    40
CDeploymentComponentData::CDeploymentComponentData()
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    41
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    42
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    43
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    44
CDeploymentComponentData::CDeploymentComponentData(TType aType,
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    45
        const TDesC8 &aDataFile) :
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    46
    iDataFileName(aDataFile), iType(aType)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    47
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    48
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    49
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    50
void CDeploymentComponentData::ConstructL(const TDesC8 &aData,
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    51
        const TDesC8 &aMime)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    52
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    53
    SetDataL(aData, aMime);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    54
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    55
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    56
CDeploymentComponentData &CDeploymentComponentData::operator=(
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    57
        const CDeploymentComponentData &aData )
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    58
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    59
    if( &aData != this )
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    60
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    61
        SetDataL( aData.Data(), aData.MimeType() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    62
        iType = aData.iType;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    63
        iDataFileName = aData.iDataFileName;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    64
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    65
    return *this;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    66
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    67
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    68
void CDeploymentComponentData::ConstructLoadL(RReadStream &aStream)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    69
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    70
    TUint32 len(aStream.ReadUint32L() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    71
    aStream.ReadL(iDataFileName, len);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    72
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    73
    len = aStream.ReadUint32L();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    74
    aStream.ReadL(iMimeType, len);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    75
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    76
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    77
CDeploymentComponentData* CDeploymentComponentData::NewL(TType aType,
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    78
        const TDesC8 &aData, const TDesC8 &aMime, const TDesC8 &aDataFile)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    79
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    80
    CDeploymentComponentData *self = CDeploymentComponentData::NewLC(aType,
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    81
            aData, aMime, aDataFile);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    82
    CleanupStack::Pop();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    83
    return self;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    84
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    85
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    86
CDeploymentComponentData* CDeploymentComponentData::NewLC(TType aType,
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    87
        const TDesC8 &aData, const TDesC8 &aMime, const TDesC8 &aDataFile)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    88
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    89
    CDeploymentComponentData *self = new ( ELeave ) CDeploymentComponentData( aType, aDataFile);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    90
    CleanupStack::PushL(self) ;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    91
    self->ConstructL(aData, aMime);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    92
    return self;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    93
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    94
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    95
CDeploymentComponentData* CDeploymentComponentData::LoadL(
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    96
        RReadStream &aBuffer)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    97
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    98
    CDeploymentComponentData *self =
d316aecb87fd 201025_02
hgs
parents:
diff changeset
    99
            CDeploymentComponentData::LoadLC(aBuffer);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   100
    CleanupStack::Pop();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   101
    return self;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   102
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   103
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   104
CDeploymentComponentData* CDeploymentComponentData::LoadLC(
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   105
        RReadStream &aBuffer)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   106
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   107
    CDeploymentComponentData *self = new ( ELeave ) CDeploymentComponentData();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   108
    CleanupStack::PushL(self) ;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   109
    self->ConstructLoadL(aBuffer);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   110
    return self;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   111
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   112
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   113
CDeploymentComponentData::~CDeploymentComponentData()
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   114
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   115
    RDEBUG8_3("CDeploymentComponentData::~CDeploymentComponentData 0x%X - 0x%X", reinterpret_cast<TUint>(this),
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   116
            reinterpret_cast<TUint>(this)+sizeof( CDeploymentComponentData ) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   117
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   118
    delete iData;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   119
    iData = NULL;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   120
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   121
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   122
TInt CDeploymentComponentData::DataLengthL() const
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   123
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   124
    TInt ret( 0);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   125
    if (iData == NULL)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   126
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   127
        if (iDataFileName.Length() > 0)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   128
            {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   129
            RFs fs;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   130
            User::LeaveIfError(fs.Connect() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   131
            CleanupClosePushL(fs); // 1
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   132
            TEntry entry;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   133
            TFileName fileName;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   134
            fileName.Copy(iDataFileName);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   135
            User::LeaveIfError(fs.Entry(fileName, entry) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   136
            ret = entry.iSize;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   137
            CleanupStack::PopAndDestroy( &fs);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   138
            }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   139
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   140
    else
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   141
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   142
        ret = iData->Length();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   143
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   144
    return ret;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   145
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   146
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   147
const TDesC8 &CDeploymentComponentData::Data() const
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   148
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   149
    if (iData == NULL)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   150
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   151
        TRAPD( err, LoadDataL() )
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   152
        ;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   153
        if (err != KErrNone)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   154
            {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   155
            return KNullDesC8();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   156
            }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   157
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   158
    if (iData != NULL)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   159
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   160
        return *iData;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   161
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   162
    else
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   163
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   164
        return KNullDesC8();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   165
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   166
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   167
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   168
void CDeploymentComponentData::LoadDataL() const
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   169
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   170
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   171
    if (iDataFileName.Length() > 0)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   172
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   173
        RFs fs;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   174
        User::LeaveIfError(fs.Connect() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   175
        CleanupClosePushL(fs); // 1
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   176
        RFile file;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   177
        TFileName fileName;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   178
        fileName.Copy(iDataFileName);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   179
        TInt err(file.Open(fs, fileName, EFileRead) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   180
        if (err == KErrNone)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   181
            {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   182
            CleanupClosePushL(file); // 2
67
hgs
parents: 47
diff changeset
   183
            TInt fsize = 0;
47
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   184
            User::LeaveIfError(file.Size(fsize) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   185
            iData = HBufC8::NewL(fsize);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   186
            TPtr8 ptr(iData->Des() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   187
            User::LeaveIfError(file.Read(ptr) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   188
            CleanupStack::PopAndDestroy( &file);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   189
            }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   190
        else
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   191
            {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   192
            RDEBUG_3( "ERROR Leaving CDeploymentComponentData::Data - SEVERE Could not open data file '%S': %d!",
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   193
                    &fileName, err );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   194
            User::Leave(KErrNotFound) ;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   195
            }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   196
        CleanupStack::PopAndDestroy( &fs);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   197
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   198
    else
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   199
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   200
        RDEBUG( "ERROR Leaving CDeploymentComponentData::LoadDataL() - No file to load!" );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   201
        User::Leave(KErrNotFound) ;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   202
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   203
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   204
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   205
TUid CDeploymentComponentData::SetDataL(const TDesC8& aMimeType)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   206
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   207
    RDEBUG8_2("CDeploymentComponentData::SetDataL() aMimeType: (%S)", &aMimeType);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   208
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   209
    TUid ret(TUid::Null());
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   210
    iMimeType = aMimeType.Left(KMaxMimeLength);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   211
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   212
    if (aMimeType.Length()!=NULL)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   213
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   214
        TUid ret(TUid::Null());
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   215
        RFs fs;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   216
        User::LeaveIfError(fs.Connect());
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   217
        CleanupClosePushL(fs);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   218
        CFileMan *fm = CFileMan::NewL(fs);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   219
        CleanupStack::PushL(fm);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   220
        TFileName oldfilepath;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   221
        oldfilepath.Copy(iDataFileName);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   222
        
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   223
        
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   224
        RDEBUG("App Mgmt before copy start");
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   225
        TInt maxLength = iDataFileName.Length();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   226
        TChar charvaldot = '.';
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   227
        TChar charvalslash = '\\';
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   228
        //TFileName oldfilepath;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   229
        TInt pos = iDataFileName.LocateReverse(charvaldot);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   230
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   231
        TInt lengthDeleted = maxLength - pos;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   232
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   233
        iDataFileName.Delete(pos, lengthDeleted);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   234
        
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   235
        if (iMimeType == KSisxMimeType)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   236
            {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   237
            _LIT16(KExt,".sisx");
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   238
            iExtn.Append(KExt);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   239
            }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   240
        if(iMimeType==KSisMimeType)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   241
            {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   242
            _LIT16(KExt,".sis");
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   243
            iExtn.Append(KExt);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   244
            }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   245
        if(iMimeType==KPipMimeType)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   246
            {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   247
            _LIT16(KExt,".pip");
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   248
            iExtn.Append(KExt);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   249
            }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   250
        if(iMimeType==KJadMIMEType)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   251
            {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   252
            _LIT16(KExt,".jad");
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   253
            iExtn.Append(KExt);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   254
            }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   255
        if(iMimeType==KJarMIMEType)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   256
            {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   257
            _LIT16(KExt,".jar");
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   258
            iExtn.Append(KExt);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   259
            }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   260
        if(iMimeType==KJavaMIMEType)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   261
            {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   262
            _LIT16(KExt,".jar");
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   263
            iExtn.Append(KExt);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   264
            }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   265
        iDataFileName.Append(iExtn);//file name with sisx extension
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   266
        TFileName newfilepath;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   267
        newfilepath.Copy(iDataFileName);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   268
        User::LeaveIfError(fm->Rename(oldfilepath, newfilepath));
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   269
        CleanupStack::PopAndDestroy(fm);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   270
        CleanupStack::PopAndDestroy( &fs);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   271
        //RDEBUG_2(" filename: %S", iDataFileName );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   272
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   273
    if (IsSISInstallFile(aMimeType) )
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   274
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   275
        RFs fs;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   276
        User::LeaveIfError(fs.Connect() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   277
        CleanupClosePushL(fs);     
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   278
        ret = ResolveUidL(fs);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   279
        CleanupStack::PopAndDestroy( &fs);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   280
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   281
    RDEBUG8_2("CDeploymentComponentData::SetDataL() UID: (0x%x)", ret.iUid);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   282
    return ret;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   283
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   284
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   285
TUid CDeploymentComponentData::SetDataL(const TFileName &aData,
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   286
        const TDesC8& aMimeType)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   287
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   288
    RDEBUG_2("CDeploymentComponentData::SetDataL() TFileName: (%S)", &aData);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   289
    
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   290
    _LIT(KNewPath, "c:\\private\\200267FB\\");
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   291
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   292
    TUid ret(TUid::Null());
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   293
    iMimeType = aMimeType.Left(KMaxMimeLength) ;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   294
    RFs fs;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   295
    User::LeaveIfError(fs.Connect() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   296
    CleanupClosePushL(fs);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   297
    CFileMan *fm = CFileMan::NewL(fs);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   298
    CleanupStack::PushL(fm);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   299
    TFileName fn;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   300
    fn.Copy(iDataFileName);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   301
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   302
    RDEBUG("App Mgmt before copy start");
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   303
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   304
    
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   305
    TInt maxLength = iDataFileName.Length();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   306
    TChar charvaldot = '.';
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   307
    TChar charvalslash = '\\';
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   308
    
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   309
    TInt pos = iDataFileName.LocateReverse(charvaldot);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   310
    
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   311
    TInt lengthDeleted = maxLength-pos;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   312
    
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   313
    iDataFileName.Delete(pos, lengthDeleted);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   314
    
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   315
    TInt srcpos = aData.LocateReverse(charvaldot);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   316
    
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   317
    TBuf<15> extn(aData.Mid(srcpos));
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   318
    
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   319
    iDataFileName.Append(extn);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   320
    
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   321
    TFileName newfilepath;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   322
    newfilepath.Copy(iDataFileName);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   323
    
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   324
    User::LeaveIfError(fm->Move(aData,KNewPath()));
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   325
    
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   326
    TFileName oldfilepath(KNewPath());
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   327
    oldfilepath.Append(aData.Mid(aData.LocateReverse(charvalslash)));
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   328
    
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   329
    User::LeaveIfError(fm->Rename(oldfilepath, newfilepath));
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   330
   
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   331
    
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   332
    //User::LeaveIfError(fm->Copy(aData, fn) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   333
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   334
    RDEBUG("App Mgmt before copy End");
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   335
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   336
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   337
    if (IsSISInstallFile(aMimeType) )
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   338
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   339
        ret = ResolveUidL(fs);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   340
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   341
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   342
    CleanupStack::PopAndDestroy(fm);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   343
    CleanupStack::PopAndDestroy( &fs);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   344
    RDEBUG_2("CDeploymentComponentData::SetDataL() (%d)", ret.iUid);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   345
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   346
    return ret;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   347
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   348
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   349
TUid CDeploymentComponentData::SetDataL(const TDesC8 &aData,
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   350
        const TDesC8 &aMimeType)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   351
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   352
    TUid ret(TUid::Null());
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   353
    if (iData)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   354
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   355
        delete iData;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   356
        iData = NULL;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   357
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   358
    iData = aData.AllocL();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   359
    ret = SetDataL(aMimeType);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   360
    return ret;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   361
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   362
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   363
TBool CDeploymentComponentData::IsSISInstallFile(const TDesC8 &aMimeType)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   364
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   365
    TBool isSIS(EFalse);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   366
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   367
    if (aMimeType == KSisxMimeType || aMimeType == KPipMimeType || aMimeType
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   368
            == KDrmMessageMimeType || aMimeType == KDrmContentMimeType || aMimeType == KSisMimeType)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   369
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   370
        isSIS = ETrue;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   371
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   372
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   373
    return isSIS;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   374
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   375
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   376
TUid CDeploymentComponentData::ResolveUidL(RFs& aFs)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   377
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   378
    RDEBUG("CDeploymentComponentData::ResolveUidL()");
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   379
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   380
    TUid ret(TUid::Null() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   381
    HBufC* buf = HBufC::NewLC(KMaxFileName);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   382
    TPtr16 ptr = buf->Des();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   383
    ptr.Copy(iDataFileName);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   384
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   385
    // if PIP/DRM package, we need to use license manager to extract the sis file
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   386
    if (iMimeType == KPipMimeType || iMimeType == KDrmMessageMimeType
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   387
            || iMimeType == KDrmContentMimeType)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   388
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   389
        RDEBUG8_2("	-> mime: %S", &iMimeType );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   390
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   391
        RFile originalFile;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   392
        RFile decryptedFile;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   393
        TFileName decryptedTempFileName;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   394
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   395
        RDEBUG_2("	-> opening original file: %S", &ptr );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   396
        // leave if can not open the original file
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   397
        User::LeaveIfError(originalFile.Open(aFs, ptr, EFileWrite) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   398
        RDEBUG("	-> done");
67
hgs
parents: 47
diff changeset
   399
				
hgs
parents: 47
diff changeset
   400
		CleanupClosePushL(originalFile);
47
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   401
        // First construct the temp path
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   402
        User::LeaveIfError(aFs.PrivatePath(decryptedTempFileName) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   403
        // set drive letter into the path
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   404
        decryptedTempFileName.Insert( 0, TParsePtrC( PathInfo::PhoneMemoryRootPath() ).Drive() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   405
        // append "piptemp\\"	
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   406
        decryptedTempFileName.Append(KTempDir);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   407
        // create the folder
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   408
        aFs.MkDir(decryptedTempFileName);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   409
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   410
        // Use license manager to extract files from the pip package
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   411
        CDRMLicenseManager* licenseMgr = CDRMLicenseManager::NewL();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   412
        CleanupStack::PushL(licenseMgr);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   413
        // decryp from the original file into the temp file   
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   414
        RDEBUG_2("	-> extracting SIS file into: %S", &decryptedTempFileName);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   415
        User::LeaveIfError(licenseMgr->ExtractSISFileL(originalFile,
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   416
                decryptedTempFileName) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   417
        RDEBUG("	-> done");
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   418
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   419
        // Get the sis file name 
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   420
        decryptedTempFileName.Append( *(licenseMgr->GetSISMemberL()->Name() ));
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   421
        // open temporary handle to it.
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   422
        RDEBUG_2("	-> opening decrypted file: %S", &decryptedTempFileName );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   423
        User::LeaveIfError(decryptedFile.Open(aFs, decryptedTempFileName,
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   424
                EFileShareAny) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   425
        RDEBUG("	-> done");
67
hgs
parents: 47
diff changeset
   426
        CleanupClosePushL(decryptedFile);
47
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   427
        // parse the uid from the file
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   428
        ret = ParseUidFromSisFileL(decryptedFile);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   429
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   430
        // delete the temp file
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   431
        TInt err = aFs.Delete(decryptedTempFileName);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   432
        if (err != KErrNone)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   433
            {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   434
            RDEBUG_2("**** ERROR, unable to delete temporary file: %S", &decryptedTempFileName );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   435
            }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   436
67
hgs
parents: 47
diff changeset
   437
        CleanupStack::PopAndDestroy(&decryptedFile);
hgs
parents: 47
diff changeset
   438
        CleanupStack::PopAndDestroy(licenseMgr);      
hgs
parents: 47
diff changeset
   439
        CleanupStack::PopAndDestroy(&originalFile);
47
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   440
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   441
    else
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   442
        if (iMimeType == KSisxMimeType || iMimeType == KSisMimeType )
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   443
            {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   444
            RDEBUG("	-> mime: x-epoc/x-sisx-app");
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   445
            RFile originalFile;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   446
            RDEBUG_2("	-> opening file: %S", &ptr );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   447
            User::LeaveIfError(originalFile.Open(aFs, ptr, EFileRead) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   448
            RDEBUG("	-> opened ok");
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   449
            ret = ParseUidFromSisFileL(originalFile);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   450
            originalFile.Close();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   451
            }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   452
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   453
        else
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   454
            {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   455
            RDEBUG8_2( "**** ERROR - CDeploymentComponentData::ResolveUidL( ) - cannot get uid from mime type: %S", &iMimeType );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   456
            }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   457
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   458
    CleanupStack::PopAndDestroy(buf);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   459
    return ret;
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 CDeploymentComponentData::SerializedFormL(RWriteStream &aBuffer) const
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   463
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   464
    aBuffer.WriteUint32L(iDataFileName.Length() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   465
    aBuffer.WriteL(iDataFileName);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   466
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   467
    aBuffer.WriteUint32L(iMimeType.Length() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   468
    aBuffer.WriteL(iMimeType);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   469
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 CDeploymentComponentData::DestroyL(RFs &aFs) const
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   473
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   474
    TFileName fn;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   475
    fn.Copy(iDataFileName);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   476
    aFs.Delete(fn) ;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   477
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   478
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   479
const TDesC8 &CDeploymentComponentData::DataFileName() const
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   480
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   481
    return iDataFileName;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   482
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   483
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   484
void CDeploymentComponentData::PersistL(RFs &aFs)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   485
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   486
    if (iData)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   487
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   488
        RFile file;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   489
        TFileName aFile;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   490
        aFile.Copy(iDataFileName) ;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   491
        RDEBUG_3( "CDeploymentComponentData::PersistL() - Saving '%S', dataLenght %d", &aFile, (iData ? iData->Length() : 0) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   492
        User::LeaveIfError(file.Replace(aFs, aFile, EFileWrite) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   493
        CleanupClosePushL(file) ;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   494
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   495
        file.Write( *iData) ;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   496
        file.Flush();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   497
        delete iData;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   498
        iData = NULL;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   499
        CleanupStack::PopAndDestroy( &file) ; // file
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   500
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   501
    else
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   502
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   503
        RDEBUG( "CDeploymentComponentData::PersistL() - Already persisted" );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   504
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   505
    RDEBUG( "CDeploymentComponentData::PersistL() - Done" );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   506
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   507
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   508
TInt CDeploymentComponentData::SerializedFormLength() const
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   509
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   510
    return iDataFileName.Length() + (2 * 4) + iMimeType.Length();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   511
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   512
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   513
void CDeploymentComponentData::SetDataFileNameL(const TDesC8 &aNewFileName)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   514
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   515
    if (aNewFileName.Length() > 0)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   516
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   517
        RFs fs;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   518
        User::LeaveIfError(fs.Connect() );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   519
        CleanupClosePushL(fs);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   520
        TFileName newfile;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   521
        newfile.Copy(aNewFileName);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   522
        TFileName oldfile;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   523
        oldfile.Copy(iDataFileName);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   524
        User::LeaveIfError(BaflUtils::RenameFile(fs, oldfile, newfile) );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   525
        CleanupStack::PopAndDestroy( &fs);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   526
        iDataFileName = aNewFileName;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   527
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   528
    else
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   529
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   530
        RDEBUG( "CDeploymentComponentData::SetDataFileNameL - ERROR Cannot set empty filename!" );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   531
        User::Leave(KErrArgument);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   532
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   533
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   534
void CDeploymentComponentData::SetMimeTypeL(const TDesC8 &aMimeType)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   535
{
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   536
	iMimeType = aMimeType.Left(KMaxMimeLength) ;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   537
}
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   538
void CDeploymentComponentData::ResetData(RFs &aFs)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   539
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   540
    TRAP_IGNORE(DestroyL( aFs ));
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   541
    iDataFileName = KNullDesC8();
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   542
    delete iData;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   543
    iData = NULL;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   544
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   545
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   546
TUid CDeploymentComponentData::ParseUidFromSisFileL(RFile& aHandleToFile)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   547
    {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   548
    RDEBUG("CDeploymentComponentData::ParseUidFromSisFileL");
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   549
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   550
    TUid appUid;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   551
    TInt uidLen = sizeof(TInt32);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   552
    TInt seekLen = sizeof(TInt32) + sizeof(TInt32);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   553
    User::LeaveIfError(aHandleToFile.Seek(ESeekStart, seekLen));
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   554
    TPckg<TInt32> uid1(appUid.iUid);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   555
    User::LeaveIfError(aHandleToFile.Read(uid1, uidLen));
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   556
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   557
    if (uid1.Length() != uidLen)
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   558
        {
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   559
        RDEBUG("**** ERROR - uid length inconsistency - underflow");
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   560
        User::Leave(KErrUnderflow);
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   561
        }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   562
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   563
    RDEBUG_2("	-> returning SIS UID: %d", appUid.iUid );
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   564
    return appUid;
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   565
    }
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   566
d316aecb87fd 201025_02
hgs
parents:
diff changeset
   567
//  End of File