brandingserver/BSServer/cbssession.cpp
author hgs
Sun, 11 Apr 2010 15:33:49 +0530
changeset 31 9dbc70490d9a
permissions -rw-r--r--
201014
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
31
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of the License "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  CBSSession.cpp
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
//  INCLUDE FILES
hgs
parents:
diff changeset
    21
#include <e32base.h>
hgs
parents:
diff changeset
    22
#include <apgcli.h>
hgs
parents:
diff changeset
    23
hgs
parents:
diff changeset
    24
#include "cbssession.h"
hgs
parents:
diff changeset
    25
#include "cbsserver.h"
hgs
parents:
diff changeset
    26
#include "DebugTrace.h"
hgs
parents:
diff changeset
    27
#include "cbsbrandhandler.h"
hgs
parents:
diff changeset
    28
#include "cbsstoragemanager.h"
hgs
parents:
diff changeset
    29
#include "cbsstorage.h"
hgs
parents:
diff changeset
    30
#include "cbsbitmap.h"
hgs
parents:
diff changeset
    31
//#include "cbselement.h"
hgs
parents:
diff changeset
    32
#include "rbsobjowningptrarray.h"
hgs
parents:
diff changeset
    33
#include "bselementfactory.h"
hgs
parents:
diff changeset
    34
#include "bsimportconstants.h"
hgs
parents:
diff changeset
    35
#include <badesca.h>
hgs
parents:
diff changeset
    36
#include <s32buf.h>
hgs
parents:
diff changeset
    37
#include <s32mem.h>
hgs
parents:
diff changeset
    38
#include <utf.h>
hgs
parents:
diff changeset
    39
#include <e32property.h>
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
// ==============================================================
hgs
parents:
diff changeset
    42
// ======================== SESSION =============================
hgs
parents:
diff changeset
    43
// ==============================================================
hgs
parents:
diff changeset
    44
hgs
parents:
diff changeset
    45
// Two-phased constructor.
hgs
parents:
diff changeset
    46
CBSSession* CBSSession::NewL()
hgs
parents:
diff changeset
    47
    {
hgs
parents:
diff changeset
    48
    TRACE( T_LIT("CBSSession::NewL begin") );
hgs
parents:
diff changeset
    49
    CBSSession* self = new( ELeave ) CBSSession();
hgs
parents:
diff changeset
    50
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
    51
    self->ConstructL();
hgs
parents:
diff changeset
    52
    CleanupStack::Pop( self );
hgs
parents:
diff changeset
    53
    TRACE( T_LIT("CBSSession::NewL end") );
hgs
parents:
diff changeset
    54
    return self;
hgs
parents:
diff changeset
    55
    }
hgs
parents:
diff changeset
    56
hgs
parents:
diff changeset
    57
// Symbian OS default constructor can leave.
hgs
parents:
diff changeset
    58
void CBSSession::ConstructL()
hgs
parents:
diff changeset
    59
	{
hgs
parents:
diff changeset
    60
	}
hgs
parents:
diff changeset
    61
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
// destructor
hgs
parents:
diff changeset
    64
CBSSession::~CBSSession()
hgs
parents:
diff changeset
    65
    {
hgs
parents:
diff changeset
    66
    TRACE( T_LIT("CBSSession[%d]::~CBSSession()"), this );
hgs
parents:
diff changeset
    67
hgs
parents:
diff changeset
    68
    if( Server() )
hgs
parents:
diff changeset
    69
        {
hgs
parents:
diff changeset
    70
        Server()->SessionDied( this );
hgs
parents:
diff changeset
    71
        }
hgs
parents:
diff changeset
    72
	delete iText;
hgs
parents:
diff changeset
    73
	delete iBuffer;
hgs
parents:
diff changeset
    74
	delete iBranding;
hgs
parents:
diff changeset
    75
	delete iSeveralData;
hgs
parents:
diff changeset
    76
	
hgs
parents:
diff changeset
    77
#ifdef __WINSCW__
hgs
parents:
diff changeset
    78
	if( iStorageManager )
hgs
parents:
diff changeset
    79
		{
hgs
parents:
diff changeset
    80
		iStorageManager->WriteIbyFiles();
hgs
parents:
diff changeset
    81
		}
hgs
parents:
diff changeset
    82
#endif
hgs
parents:
diff changeset
    83
	delete iStorageManager;
hgs
parents:
diff changeset
    84
    delete iSessionInfo;
hgs
parents:
diff changeset
    85
hgs
parents:
diff changeset
    86
    }
hgs
parents:
diff changeset
    87
hgs
parents:
diff changeset
    88
hgs
parents:
diff changeset
    89
// C++ default constructor can NOT contain any code, that
hgs
parents:
diff changeset
    90
// might leave.
hgs
parents:
diff changeset
    91
//
hgs
parents:
diff changeset
    92
CBSSession::CBSSession()
hgs
parents:
diff changeset
    93
    {
hgs
parents:
diff changeset
    94
    }
hgs
parents:
diff changeset
    95
hgs
parents:
diff changeset
    96
// ---------------------------------------------------------
hgs
parents:
diff changeset
    97
// CBSSession::CreateL
hgs
parents:
diff changeset
    98
//
hgs
parents:
diff changeset
    99
// (other items were commented in a header).
hgs
parents:
diff changeset
   100
// ---------------------------------------------------------
hgs
parents:
diff changeset
   101
//
hgs
parents:
diff changeset
   102
void CBSSession::CreateL()
hgs
parents:
diff changeset
   103
    {
hgs
parents:
diff changeset
   104
    TRACE( T_LIT("CBSSession[%d]::CreateL()"), this );
hgs
parents:
diff changeset
   105
    Server()->SessionCreatedL( this );
hgs
parents:
diff changeset
   106
    }
hgs
parents:
diff changeset
   107
hgs
parents:
diff changeset
   108
// ---------------------------------------------------------
hgs
parents:
diff changeset
   109
// CBSSession::ServiceL
hgs
parents:
diff changeset
   110
//
hgs
parents:
diff changeset
   111
// (other items were commented in a header).
hgs
parents:
diff changeset
   112
// ---------------------------------------------------------
hgs
parents:
diff changeset
   113
//
hgs
parents:
diff changeset
   114
void CBSSession::ServiceL( const RMessage2 &aMessage )
hgs
parents:
diff changeset
   115
    {
hgs
parents:
diff changeset
   116
hgs
parents:
diff changeset
   117
    /*if( !iSessionInfo )
hgs
parents:
diff changeset
   118
        {
hgs
parents:
diff changeset
   119
        TRAPD( err, ExtractInfoL( aMessage ) );
hgs
parents:
diff changeset
   120
        TRACE( T_LIT("CBSSession::ServiceL() ExtractInfoL returned with [%d]"), err );
hgs
parents:
diff changeset
   121
        }
hgs
parents:
diff changeset
   122
	*/
hgs
parents:
diff changeset
   123
    if( DispatchMessageL( aMessage ) )
hgs
parents:
diff changeset
   124
        {
hgs
parents:
diff changeset
   125
        if( !iMessageCompleted )
hgs
parents:
diff changeset
   126
        	{
hgs
parents:
diff changeset
   127
        	aMessage.Complete( KErrNone );
hgs
parents:
diff changeset
   128
        	}
hgs
parents:
diff changeset
   129
        }
hgs
parents:
diff changeset
   130
    }
hgs
parents:
diff changeset
   131
hgs
parents:
diff changeset
   132
// ---------------------------------------------------------
hgs
parents:
diff changeset
   133
// CBSSession::ServiceError
hgs
parents:
diff changeset
   134
//
hgs
parents:
diff changeset
   135
// (other items were commented in a header).
hgs
parents:
diff changeset
   136
// ---------------------------------------------------------
hgs
parents:
diff changeset
   137
//
hgs
parents:
diff changeset
   138
void CBSSession::ServiceError( const RMessage2& aMessage,
hgs
parents:
diff changeset
   139
                                      TInt aError )
hgs
parents:
diff changeset
   140
    {
hgs
parents:
diff changeset
   141
    aMessage.Complete( aError );
hgs
parents:
diff changeset
   142
    }
hgs
parents:
diff changeset
   143
hgs
parents:
diff changeset
   144
// ---------------------------------------------------------
hgs
parents:
diff changeset
   145
// CBSSession::HandleBackupStateL
hgs
parents:
diff changeset
   146
//
hgs
parents:
diff changeset
   147
// (other items were commented in a header).
hgs
parents:
diff changeset
   148
// ---------------------------------------------------------
hgs
parents:
diff changeset
   149
//
hgs
parents:
diff changeset
   150
void CBSSession::HandleBackupStateL( TBackupState aState )
hgs
parents:
diff changeset
   151
    {
hgs
parents:
diff changeset
   152
	iIsBackup = ETrue ;	
hgs
parents:
diff changeset
   153
    switch( aState )
hgs
parents:
diff changeset
   154
        {
hgs
parents:
diff changeset
   155
        case EBackupNotActive: // backup is complete
hgs
parents:
diff changeset
   156
            {
hgs
parents:
diff changeset
   157
            // release session lock
hgs
parents:
diff changeset
   158
            iBackupActive = EFalse;
hgs
parents:
diff changeset
   159
            if( iStorageManager )
hgs
parents:
diff changeset
   160
                {
hgs
parents:
diff changeset
   161
                iStorageManager->ReleaseLockL();
hgs
parents:
diff changeset
   162
                }
hgs
parents:
diff changeset
   163
                
hgs
parents:
diff changeset
   164
			// Sending backup active state change event after unlocking it
hgs
parents:
diff changeset
   165
			if( iObserverActive )
hgs
parents:
diff changeset
   166
				{
hgs
parents:
diff changeset
   167
				iObserverMessage.Complete( KErrNone );
hgs
parents:
diff changeset
   168
				iObserverActive = EFalse;
hgs
parents:
diff changeset
   169
				}
hgs
parents:
diff changeset
   170
hgs
parents:
diff changeset
   171
            break;
hgs
parents:
diff changeset
   172
            }
hgs
parents:
diff changeset
   173
        case EBackupActive: // backup activated
hgs
parents:
diff changeset
   174
            {
hgs
parents:
diff changeset
   175
hgs
parents:
diff changeset
   176
            // Lock session. Branding data is not available until
hgs
parents:
diff changeset
   177
            // backup is completed.
hgs
parents:
diff changeset
   178
            iBackupActive = ETrue;
hgs
parents:
diff changeset
   179
hgs
parents:
diff changeset
   180
			// Sending backup active state change event before locking it
hgs
parents:
diff changeset
   181
			if( iObserverActive )
hgs
parents:
diff changeset
   182
				{
hgs
parents:
diff changeset
   183
				iObserverMessage.Complete( KErrNone );
hgs
parents:
diff changeset
   184
				iObserverActive = EFalse;
hgs
parents:
diff changeset
   185
				}
hgs
parents:
diff changeset
   186
hgs
parents:
diff changeset
   187
            if( iStorageManager )
hgs
parents:
diff changeset
   188
                {
hgs
parents:
diff changeset
   189
                iStorageManager->LockStorage();
hgs
parents:
diff changeset
   190
                }
hgs
parents:
diff changeset
   191
            break;
hgs
parents:
diff changeset
   192
            }
hgs
parents:
diff changeset
   193
        default:
hgs
parents:
diff changeset
   194
            {
hgs
parents:
diff changeset
   195
            // unknown state
hgs
parents:
diff changeset
   196
            }
hgs
parents:
diff changeset
   197
        }
hgs
parents:
diff changeset
   198
hgs
parents:
diff changeset
   199
        
hgs
parents:
diff changeset
   200
    }
hgs
parents:
diff changeset
   201
hgs
parents:
diff changeset
   202
// ---------------------------------------------------------
hgs
parents:
diff changeset
   203
// CBSSession::DispatchMessageL
hgs
parents:
diff changeset
   204
//
hgs
parents:
diff changeset
   205
// (other items were commented in a header).
hgs
parents:
diff changeset
   206
// ---------------------------------------------------------
hgs
parents:
diff changeset
   207
//
hgs
parents:
diff changeset
   208
TBool CBSSession::DispatchMessageL( const RMessage2& aMessage )
hgs
parents:
diff changeset
   209
    {
hgs
parents:
diff changeset
   210
    TRACE( T_LIT("CBrandingSession[%d]::DispatchMessageL() %d"),
hgs
parents:
diff changeset
   211
                  this, aMessage.Function() );
hgs
parents:
diff changeset
   212
	iMessageCompleted = EFalse;
hgs
parents:
diff changeset
   213
    TBool msgNeedsToBeCompleted = ETrue;
hgs
parents:
diff changeset
   214
    
hgs
parents:
diff changeset
   215
    if( iBackupActive )
hgs
parents:
diff changeset
   216
        {
hgs
parents:
diff changeset
   217
        // if backup is active, we don't take requests.
hgs
parents:
diff changeset
   218
        // We could take some requests which do not require disk
hgs
parents:
diff changeset
   219
        // operations. This is not a good solution and a better one should be
hgs
parents:
diff changeset
   220
        // investigated. I'm running out of time.
hgs
parents:
diff changeset
   221
        TInt msg = aMessage.Function() ; 
hgs
parents:
diff changeset
   222
        if( msg == EBSObserveGetChange ||
hgs
parents:
diff changeset
   223
        	msg == EBSObserveGetBackupState ||
hgs
parents:
diff changeset
   224
        	msg == EBSObserveBrand)
hgs
parents:
diff changeset
   225
        	{
hgs
parents:
diff changeset
   226
        	//allow to do the operation	
hgs
parents:
diff changeset
   227
        	}
hgs
parents:
diff changeset
   228
        else
hgs
parents:
diff changeset
   229
    	    {
hgs
parents:
diff changeset
   230
	       	User::Leave( KErrNotReady );	
hgs
parents:
diff changeset
   231
        	}
hgs
parents:
diff changeset
   232
        
hgs
parents:
diff changeset
   233
        }
hgs
parents:
diff changeset
   234
    
hgs
parents:
diff changeset
   235
    switch( aMessage.Function() )
hgs
parents:
diff changeset
   236
        {
hgs
parents:
diff changeset
   237
        case EBSInitInstall:
hgs
parents:
diff changeset
   238
        	{
hgs
parents:
diff changeset
   239
        	InitUpdateL( aMessage, EBSTxInstall );
hgs
parents:
diff changeset
   240
        	break;
hgs
parents:
diff changeset
   241
        	}
hgs
parents:
diff changeset
   242
        case EBSInitUninstall:
hgs
parents:
diff changeset
   243
        	{
hgs
parents:
diff changeset
   244
        	InitUpdateL( aMessage, EBSTxUninstall );
hgs
parents:
diff changeset
   245
        	break;
hgs
parents:
diff changeset
   246
        	}
hgs
parents:
diff changeset
   247
        case EBSInitAppend:
hgs
parents:
diff changeset
   248
        	{
hgs
parents:
diff changeset
   249
        	InitUpdateL( aMessage, EBSTxAppend );
hgs
parents:
diff changeset
   250
        	break;
hgs
parents:
diff changeset
   251
        	}
hgs
parents:
diff changeset
   252
        case EBSInitReplace:
hgs
parents:
diff changeset
   253
        	{
hgs
parents:
diff changeset
   254
        	InitUpdateL( aMessage, EBSTxReplace );
hgs
parents:
diff changeset
   255
        	break;
hgs
parents:
diff changeset
   256
        	}
hgs
parents:
diff changeset
   257
        case EBSInitAccess:
hgs
parents:
diff changeset
   258
        	{
hgs
parents:
diff changeset
   259
        	InitAccessL( aMessage );
hgs
parents:
diff changeset
   260
        	break;
hgs
parents:
diff changeset
   261
        	}
hgs
parents:
diff changeset
   262
        case EBSPrepareText:
hgs
parents:
diff changeset
   263
            {
hgs
parents:
diff changeset
   264
			GetTextL( aMessage );
hgs
parents:
diff changeset
   265
            break;
hgs
parents:
diff changeset
   266
            }
hgs
parents:
diff changeset
   267
        case EBSGetText:
hgs
parents:
diff changeset
   268
            {
hgs
parents:
diff changeset
   269
            if( iText )
hgs
parents:
diff changeset
   270
            	{
hgs
parents:
diff changeset
   271
            	aMessage.WriteL( 2, *iText );	
hgs
parents:
diff changeset
   272
            	}
hgs
parents:
diff changeset
   273
			else
hgs
parents:
diff changeset
   274
				{
hgs
parents:
diff changeset
   275
				aMessage.WriteL( 2, KNullDesC() );
hgs
parents:
diff changeset
   276
				}
hgs
parents:
diff changeset
   277
            break;
hgs
parents:
diff changeset
   278
            }
hgs
parents:
diff changeset
   279
hgs
parents:
diff changeset
   280
		case EBSIsBrandUpdateRequired:
hgs
parents:
diff changeset
   281
			isBrandUpdateRequiredL (aMessage);
hgs
parents:
diff changeset
   282
			break;
hgs
parents:
diff changeset
   283
hgs
parents:
diff changeset
   284
        case EBSGetInt:
hgs
parents:
diff changeset
   285
            {
hgs
parents:
diff changeset
   286
			GetIntL( aMessage );
hgs
parents:
diff changeset
   287
            break;
hgs
parents:
diff changeset
   288
            }
hgs
parents:
diff changeset
   289
hgs
parents:
diff changeset
   290
        case EBSPrepareBuffer:
hgs
parents:
diff changeset
   291
            {
hgs
parents:
diff changeset
   292
			GetBufferL( aMessage );
hgs
parents:
diff changeset
   293
            break;
hgs
parents:
diff changeset
   294
            }
hgs
parents:
diff changeset
   295
            
hgs
parents:
diff changeset
   296
        case EBSGetBuffer:
hgs
parents:
diff changeset
   297
            {
hgs
parents:
diff changeset
   298
            if( iBuffer )
hgs
parents:
diff changeset
   299
            	{
hgs
parents:
diff changeset
   300
            	aMessage.WriteL( 2, *iBuffer );	
hgs
parents:
diff changeset
   301
            	}
hgs
parents:
diff changeset
   302
			else
hgs
parents:
diff changeset
   303
				{
hgs
parents:
diff changeset
   304
				aMessage.WriteL( 2, KNullDesC8() );
hgs
parents:
diff changeset
   305
				}
hgs
parents:
diff changeset
   306
            break;
hgs
parents:
diff changeset
   307
            }
hgs
parents:
diff changeset
   308
            
hgs
parents:
diff changeset
   309
        case EBSGetFile:
hgs
parents:
diff changeset
   310
            {
hgs
parents:
diff changeset
   311
 			GetFileL( aMessage );
hgs
parents:
diff changeset
   312
            break;
hgs
parents:
diff changeset
   313
            }
hgs
parents:
diff changeset
   314
hgs
parents:
diff changeset
   315
        case EBSPrepareSeveral:
hgs
parents:
diff changeset
   316
        	{
hgs
parents:
diff changeset
   317
			PrepareSeveralL( aMessage );
hgs
parents:
diff changeset
   318
        	break;
hgs
parents:
diff changeset
   319
        	}
hgs
parents:
diff changeset
   320
hgs
parents:
diff changeset
   321
        case EBSGetSeveral:
hgs
parents:
diff changeset
   322
        	{
hgs
parents:
diff changeset
   323
			GetSeveralL( aMessage );
hgs
parents:
diff changeset
   324
        	break;
hgs
parents:
diff changeset
   325
        	}
hgs
parents:
diff changeset
   326
hgs
parents:
diff changeset
   327
        case EBSPrepareStructure:
hgs
parents:
diff changeset
   328
        	{
hgs
parents:
diff changeset
   329
			PrepareStructureL( aMessage );
hgs
parents:
diff changeset
   330
        	break;
hgs
parents:
diff changeset
   331
        	}
hgs
parents:
diff changeset
   332
hgs
parents:
diff changeset
   333
        case EBSGetStructure:
hgs
parents:
diff changeset
   334
    		{
hgs
parents:
diff changeset
   335
			GetStructureL( aMessage );
hgs
parents:
diff changeset
   336
    		break;
hgs
parents:
diff changeset
   337
    		}
hgs
parents:
diff changeset
   338
hgs
parents:
diff changeset
   339
        case EBSStartTransaction:
hgs
parents:
diff changeset
   340
        	{
hgs
parents:
diff changeset
   341
			StartTransactionL( aMessage );
hgs
parents:
diff changeset
   342
        	break;
hgs
parents:
diff changeset
   343
        	}
hgs
parents:
diff changeset
   344
        	
hgs
parents:
diff changeset
   345
        case EBSStopTransaction:
hgs
parents:
diff changeset
   346
        	{
hgs
parents:
diff changeset
   347
        	StopTransactionL( aMessage );
hgs
parents:
diff changeset
   348
        	break;
hgs
parents:
diff changeset
   349
        	}
hgs
parents:
diff changeset
   350
        case EBSCancelTransaction:
hgs
parents:
diff changeset
   351
        	{
hgs
parents:
diff changeset
   352
        	CancelTransactionL( aMessage );
hgs
parents:
diff changeset
   353
        	break;
hgs
parents:
diff changeset
   354
        	}
hgs
parents:
diff changeset
   355
hgs
parents:
diff changeset
   356
        case EBSInstall:
hgs
parents:
diff changeset
   357
        	{
hgs
parents:
diff changeset
   358
        	InstallL( aMessage );
hgs
parents:
diff changeset
   359
        	break;
hgs
parents:
diff changeset
   360
        	}
hgs
parents:
diff changeset
   361
hgs
parents:
diff changeset
   362
        case EBSReplace:
hgs
parents:
diff changeset
   363
        	{
hgs
parents:
diff changeset
   364
        	ReplaceL( aMessage );
hgs
parents:
diff changeset
   365
        	break;
hgs
parents:
diff changeset
   366
        	}
hgs
parents:
diff changeset
   367
hgs
parents:
diff changeset
   368
        case EBSAppend:
hgs
parents:
diff changeset
   369
        	{
hgs
parents:
diff changeset
   370
        	AppendL( aMessage );
hgs
parents:
diff changeset
   371
        	break;
hgs
parents:
diff changeset
   372
        	}
hgs
parents:
diff changeset
   373
hgs
parents:
diff changeset
   374
        case EBSRemoveBrand:
hgs
parents:
diff changeset
   375
        	{
hgs
parents:
diff changeset
   376
        	RemoveBrandL( aMessage );
hgs
parents:
diff changeset
   377
        	break;
hgs
parents:
diff changeset
   378
        	}
hgs
parents:
diff changeset
   379
        case EBSRemoveApplication:
hgs
parents:
diff changeset
   380
        	{
hgs
parents:
diff changeset
   381
        	RemoveApplicationL( aMessage );
hgs
parents:
diff changeset
   382
        	break;
hgs
parents:
diff changeset
   383
        	}
hgs
parents:
diff changeset
   384
        	
hgs
parents:
diff changeset
   385
        case EBSObserveBrand:
hgs
parents:
diff changeset
   386
        	{
hgs
parents:
diff changeset
   387
        	if( iObserverActive )
hgs
parents:
diff changeset
   388
        		{
hgs
parents:
diff changeset
   389
        		// complete the old observer request with KErrCancel
hgs
parents:
diff changeset
   390
        		iObserverMessage.Complete( KErrCancel );
hgs
parents:
diff changeset
   391
        		}
hgs
parents:
diff changeset
   392
        	iObserverMessage = aMessage;
hgs
parents:
diff changeset
   393
        	iObserverActive = ETrue;
hgs
parents:
diff changeset
   394
        	msgNeedsToBeCompleted = EFalse;
hgs
parents:
diff changeset
   395
        	break;
hgs
parents:
diff changeset
   396
        	}
hgs
parents:
diff changeset
   397
hgs
parents:
diff changeset
   398
        case EBSObserveGetNewVersion:
hgs
parents:
diff changeset
   399
        	{
hgs
parents:
diff changeset
   400
        	TInt newVersion = GetNewVersionL();
hgs
parents:
diff changeset
   401
			TPckgC<TInt> pack( newVersion );
hgs
parents:
diff changeset
   402
			aMessage.WriteL( 0, pack );
hgs
parents:
diff changeset
   403
        	break;
hgs
parents:
diff changeset
   404
        	}
hgs
parents:
diff changeset
   405
        	
hgs
parents:
diff changeset
   406
		// Get what change happen        	
hgs
parents:
diff changeset
   407
        case EBSObserveGetChange:
hgs
parents:
diff changeset
   408
        	{
hgs
parents:
diff changeset
   409
			TPckgC<TInt> pack( iIsBackup );
hgs
parents:
diff changeset
   410
			aMessage.WriteL( 0, pack );
hgs
parents:
diff changeset
   411
        	break ;
hgs
parents:
diff changeset
   412
        	}
hgs
parents:
diff changeset
   413
        	
hgs
parents:
diff changeset
   414
        // Get the backup state
hgs
parents:
diff changeset
   415
        case EBSObserveGetBackupState:
hgs
parents:
diff changeset
   416
        	{
hgs
parents:
diff changeset
   417
			TPckgC<TInt> pack( iBackupActive );
hgs
parents:
diff changeset
   418
			aMessage.WriteL( 0, pack );
hgs
parents:
diff changeset
   419
        	break ;	
hgs
parents:
diff changeset
   420
        	}
hgs
parents:
diff changeset
   421
        	
hgs
parents:
diff changeset
   422
        default:
hgs
parents:
diff changeset
   423
            {
hgs
parents:
diff changeset
   424
            User::Leave( KErrNotSupported );
hgs
parents:
diff changeset
   425
            break;
hgs
parents:
diff changeset
   426
            }
hgs
parents:
diff changeset
   427
        }
hgs
parents:
diff changeset
   428
hgs
parents:
diff changeset
   429
    return msgNeedsToBeCompleted;
hgs
parents:
diff changeset
   430
    }
hgs
parents:
diff changeset
   431
hgs
parents:
diff changeset
   432
hgs
parents:
diff changeset
   433
// ---------------------------------------------------------
hgs
parents:
diff changeset
   434
// CBSSession::InitUpdateL
hgs
parents:
diff changeset
   435
//
hgs
parents:
diff changeset
   436
// (other items were commented in a header).
hgs
parents:
diff changeset
   437
// ---------------------------------------------------------
hgs
parents:
diff changeset
   438
//
hgs
parents:
diff changeset
   439
void CBSSession::InitUpdateL( const RMessage2 &aMessage, TTransactionType aType)
hgs
parents:
diff changeset
   440
	{
hgs
parents:
diff changeset
   441
    TRACE( T_LIT("CBSSession::InitUpdateL: begin TTransactionType[%d] "),aType );
hgs
parents:
diff changeset
   442
	
hgs
parents:
diff changeset
   443
	// get the application id
hgs
parents:
diff changeset
   444
	TInt bufferSize( aMessage.GetDesLength( 0 ) );
hgs
parents:
diff changeset
   445
hgs
parents:
diff changeset
   446
    HBufC8* appId = HBufC8::NewLC( bufferSize );
hgs
parents:
diff changeset
   447
	TPtr8 appPtr = appId->Des();
hgs
parents:
diff changeset
   448
	aMessage.ReadL( 0, appPtr );
hgs
parents:
diff changeset
   449
hgs
parents:
diff changeset
   450
	HBufC* tmpAppId = CnvUtfConverter::ConvertToUnicodeFromUtf8L( *appId );
hgs
parents:
diff changeset
   451
	CleanupStack::PopAndDestroy( appId );
hgs
parents:
diff changeset
   452
	
hgs
parents:
diff changeset
   453
	delete iApplicationId;
hgs
parents:
diff changeset
   454
	iApplicationId = tmpAppId;
hgs
parents:
diff changeset
   455
hgs
parents:
diff changeset
   456
	// get the brand id
hgs
parents:
diff changeset
   457
	bufferSize = aMessage.GetDesLength( 1 );
hgs
parents:
diff changeset
   458
    HBufC8* streamBuf = HBufC8::NewLC( bufferSize );
hgs
parents:
diff changeset
   459
	TPtr8 streamPtr = streamBuf->Des();
hgs
parents:
diff changeset
   460
	aMessage.ReadL( 1, streamPtr );
hgs
parents:
diff changeset
   461
hgs
parents:
diff changeset
   462
	RDesReadStream stream;
hgs
parents:
diff changeset
   463
	CleanupClosePushL( stream );
hgs
parents:
diff changeset
   464
	stream.Open( streamPtr );
hgs
parents:
diff changeset
   465
	
hgs
parents:
diff changeset
   466
	TInt descriptorLength = stream.ReadInt16L();
hgs
parents:
diff changeset
   467
	HBufC8* brandId = HBufC8::NewLC( descriptorLength );
hgs
parents:
diff changeset
   468
	TPtr8 brandPtr = brandId->Des();
hgs
parents:
diff changeset
   469
	stream.ReadL( brandPtr, descriptorLength );
hgs
parents:
diff changeset
   470
hgs
parents:
diff changeset
   471
	HBufC* tmpBrandId = CnvUtfConverter::ConvertToUnicodeFromUtf8L( *brandId );
hgs
parents:
diff changeset
   472
	CleanupStack::PopAndDestroy( brandId );
hgs
parents:
diff changeset
   473
	delete iBrandId;
hgs
parents:
diff changeset
   474
	iBrandId = tmpBrandId;
hgs
parents:
diff changeset
   475
	
hgs
parents:
diff changeset
   476
	descriptorLength = stream.ReadInt16L();
hgs
parents:
diff changeset
   477
	HBufC8* defaultBrandId = HBufC8::NewLC( descriptorLength );
hgs
parents:
diff changeset
   478
	TPtr8 defaultPtr = defaultBrandId->Des();
hgs
parents:
diff changeset
   479
	stream.ReadL( defaultPtr, descriptorLength );
hgs
parents:
diff changeset
   480
	
hgs
parents:
diff changeset
   481
	HBufC* tmpDefaultBrandId = CnvUtfConverter::ConvertToUnicodeFromUtf8L( *defaultBrandId );
hgs
parents:
diff changeset
   482
	CleanupStack::PopAndDestroy( defaultBrandId );
hgs
parents:
diff changeset
   483
	delete iDefaultBrandId;
hgs
parents:
diff changeset
   484
	iDefaultBrandId = tmpDefaultBrandId;
hgs
parents:
diff changeset
   485
	
hgs
parents:
diff changeset
   486
	CleanupStack::PopAndDestroy( 2, streamBuf ); // stream, streamBuf
hgs
parents:
diff changeset
   487
hgs
parents:
diff changeset
   488
hgs
parents:
diff changeset
   489
	// get the language id
hgs
parents:
diff changeset
   490
	iLanguageId = (TLanguage)aMessage.Int2();
hgs
parents:
diff changeset
   491
hgs
parents:
diff changeset
   492
	// get the version
hgs
parents:
diff changeset
   493
	iReserved = aMessage.Int3();
hgs
parents:
diff changeset
   494
hgs
parents:
diff changeset
   495
	// Check if brand is discarded and client is trying to access/append/replace on that
hgs
parents:
diff changeset
   496
	// give error message saying brand not found so that client will not use that brand
hgs
parents:
diff changeset
   497
	if(aType == EBSTxAccess || aType == EBSTxAppend || aType == EBSTxReplace )
hgs
parents:
diff changeset
   498
	{
hgs
parents:
diff changeset
   499
		if(!iStorageManager)
hgs
parents:
diff changeset
   500
		{
hgs
parents:
diff changeset
   501
			iStorageManager = CBSStorageManager::NewL( this, *iApplicationId );	
hgs
parents:
diff changeset
   502
		}
hgs
parents:
diff changeset
   503
		
hgs
parents:
diff changeset
   504
		TBool brandDiscarded = EFalse ;
hgs
parents:
diff changeset
   505
		brandDiscarded = iStorageManager->CheckBrandDiscarded(*iApplicationId, *iBrandId) ;
hgs
parents:
diff changeset
   506
		
hgs
parents:
diff changeset
   507
		if(brandDiscarded)
hgs
parents:
diff changeset
   508
		{
hgs
parents:
diff changeset
   509
			TRACE( T_LIT("CBSSession::InitUpdateL: Brand discarded!->LeaveWith KErrNotFound") );
hgs
parents:
diff changeset
   510
			///Server()->DisplaySessionInfoL( this, KErrNotFound );
hgs
parents:
diff changeset
   511
			User::Leave( KErrNotFound );	
hgs
parents:
diff changeset
   512
		}
hgs
parents:
diff changeset
   513
	}
hgs
parents:
diff changeset
   514
hgs
parents:
diff changeset
   515
	if( aType == EBSTxAppend )
hgs
parents:
diff changeset
   516
		{
hgs
parents:
diff changeset
   517
		PrepareAppendL();
hgs
parents:
diff changeset
   518
		}
hgs
parents:
diff changeset
   519
	else if( aType == EBSTxReplace )
hgs
parents:
diff changeset
   520
		{
hgs
parents:
diff changeset
   521
		PrepareReplaceL();
hgs
parents:
diff changeset
   522
		}
hgs
parents:
diff changeset
   523
	else if(aType == EBSTxUninstall)
hgs
parents:
diff changeset
   524
		{
hgs
parents:
diff changeset
   525
		if( !iStorageManager )
hgs
parents:
diff changeset
   526
			{
hgs
parents:
diff changeset
   527
			iStorageManager = CBSStorageManager::NewL( this, *iApplicationId );
hgs
parents:
diff changeset
   528
			}
hgs
parents:
diff changeset
   529
		// if any client is accessing same brand leave with KErrInUse.
hgs
parents:
diff changeset
   530
		// check if the brand has any active clients
hgs
parents:
diff changeset
   531
		TBool brandActive = EFalse;
hgs
parents:
diff changeset
   532
		CBSServer* server = Server();
hgs
parents:
diff changeset
   533
		if( server )
hgs
parents:
diff changeset
   534
			{
hgs
parents:
diff changeset
   535
			brandActive = server->MatchSessionUninstallL( *iApplicationId, *iBrandId,
hgs
parents:
diff changeset
   536
												 			this);					
hgs
parents:
diff changeset
   537
			}
hgs
parents:
diff changeset
   538
			
hgs
parents:
diff changeset
   539
		if(brandActive)
hgs
parents:
diff changeset
   540
			{
hgs
parents:
diff changeset
   541
			TRACE( T_LIT("CBSSession::InitUpdateL: UnInstallation aborted -> LeaveWith KErrInUse") );
hgs
parents:
diff changeset
   542
			//Server()->DisplaySessionInfoL( this,KErrInUse);
hgs
parents:
diff changeset
   543
			//when changing this errorcode: please read the note in 
hgs
parents:
diff changeset
   544
			//UninstallL() ( installer.cpp )
hgs
parents:
diff changeset
   545
			User::Leave( KErrInUse );
hgs
parents:
diff changeset
   546
			}
hgs
parents:
diff changeset
   547
		}
hgs
parents:
diff changeset
   548
	else if( aType == EBSTxInstall )
hgs
parents:
diff changeset
   549
		{
hgs
parents:
diff changeset
   550
		if( !iStorageManager )
hgs
parents:
diff changeset
   551
			{
hgs
parents:
diff changeset
   552
			iStorageManager = CBSStorageManager::NewL( this, *iApplicationId );
hgs
parents:
diff changeset
   553
			}
hgs
parents:
diff changeset
   554
			
hgs
parents:
diff changeset
   555
		HBufC* drive = HBufC::NewLC(3);
hgs
parents:
diff changeset
   556
		TRAPD( err, iStorageManager->GetNewestVersionL( *iApplicationId,
hgs
parents:
diff changeset
   557
												   	      *iBrandId,
hgs
parents:
diff changeset
   558
										   		    	  iLanguageId ) );
hgs
parents:
diff changeset
   559
		if( ( err == KErrNotFound ) || ( err == KErrPathNotFound ) )
hgs
parents:
diff changeset
   560
			{
hgs
parents:
diff changeset
   561
			CleanupStack::PopAndDestroy(drive);
hgs
parents:
diff changeset
   562
			// this brand is not yet there, which is the correct situation here
hgs
parents:
diff changeset
   563
			// for starting install. We can just ignore this error
hgs
parents:
diff changeset
   564
			}
hgs
parents:
diff changeset
   565
			
hgs
parents:
diff changeset
   566
		else if( !err )
hgs
parents:
diff changeset
   567
			{
hgs
parents:
diff changeset
   568
			// there was no error, therefore this brand already exists in the ROM
hgs
parents:
diff changeset
   569
			// (Z drive).
hgs
parents:
diff changeset
   570
			// we leave with KErrAlreadyExists
hgs
parents:
diff changeset
   571
			if( 0 == (drive->Des().Compare(KBSZDrive)) )
hgs
parents:
diff changeset
   572
				{
hgs
parents:
diff changeset
   573
				CleanupStack::PopAndDestroy(drive);		
hgs
parents:
diff changeset
   574
			    User::Leave( KErrAlreadyExists );
hgs
parents:
diff changeset
   575
				}
hgs
parents:
diff changeset
   576
			else
hgs
parents:
diff changeset
   577
				{
hgs
parents:
diff changeset
   578
				//PopAndDestroy drive as it is not needed any longer.
hgs
parents:
diff changeset
   579
				CleanupStack::PopAndDestroy(drive);
hgs
parents:
diff changeset
   580
hgs
parents:
diff changeset
   581
				// if any client is accessing same brand leave with KErrInUse.
hgs
parents:
diff changeset
   582
				// check if the brand has any active clients
hgs
parents:
diff changeset
   583
				TBool brandActive = EFalse;
hgs
parents:
diff changeset
   584
				CBSServer* server = Server();
hgs
parents:
diff changeset
   585
				if( server )
hgs
parents:
diff changeset
   586
					{
hgs
parents:
diff changeset
   587
					brandActive = server->MatchSessionL( *iApplicationId, *iBrandId,
hgs
parents:
diff changeset
   588
													 iLanguageId, this, iReserved );					
hgs
parents:
diff changeset
   589
					}
hgs
parents:
diff changeset
   590
hgs
parents:
diff changeset
   591
				if(brandActive == EFalse)
hgs
parents:
diff changeset
   592
					{	
hgs
parents:
diff changeset
   593
					TRACE( T_LIT("CBSSession::InitUpdateL: Brand not used -> remove") );
hgs
parents:
diff changeset
   594
					iStorageManager->RemoveBrandL( *iApplicationId, *iBrandId,
hgs
parents:
diff changeset
   595
													iLanguageId, iReserved );
hgs
parents:
diff changeset
   596
					}
hgs
parents:
diff changeset
   597
				else
hgs
parents:
diff changeset
   598
					{
hgs
parents:
diff changeset
   599
					TRACE( T_LIT("CBSSession::InitUpdateL: Installation aborted->LeaveWith KErrInUse") );
hgs
parents:
diff changeset
   600
					//Server()->DisplaySessionInfoL( this,KErrInUse);
hgs
parents:
diff changeset
   601
					//when changing this errorcode: please read the note in 
hgs
parents:
diff changeset
   602
					//UninstallL() ( installer.cpp )
hgs
parents:
diff changeset
   603
					User::Leave( KErrInUse );
hgs
parents:
diff changeset
   604
					}
hgs
parents:
diff changeset
   605
				}
hgs
parents:
diff changeset
   606
			}
hgs
parents:
diff changeset
   607
		else
hgs
parents:
diff changeset
   608
			{
hgs
parents:
diff changeset
   609
			CleanupStack::PopAndDestroy(drive);	
hgs
parents:
diff changeset
   610
			// some other error
hgs
parents:
diff changeset
   611
			TRACE( T_LIT("CBSSession::InitUpdateL: ERROR aType[%d] LeaveWith[%d]"),aType,err );
hgs
parents:
diff changeset
   612
			User::Leave( err );
hgs
parents:
diff changeset
   613
			}
hgs
parents:
diff changeset
   614
		}
hgs
parents:
diff changeset
   615
		
hgs
parents:
diff changeset
   616
	
hgs
parents:
diff changeset
   617
	iInitialized = ETrue;
hgs
parents:
diff changeset
   618
hgs
parents:
diff changeset
   619
    TRACE( T_LIT("Server initialized") );
hgs
parents:
diff changeset
   620
	}
hgs
parents:
diff changeset
   621
hgs
parents:
diff changeset
   622
hgs
parents:
diff changeset
   623
hgs
parents:
diff changeset
   624
// ---------------------------------------------------------
hgs
parents:
diff changeset
   625
// CBSSession::PrepareAppendL
hgs
parents:
diff changeset
   626
//
hgs
parents:
diff changeset
   627
// (other items were commented in a header).
hgs
parents:
diff changeset
   628
// ---------------------------------------------------------
hgs
parents:
diff changeset
   629
//
hgs
parents:
diff changeset
   630
void CBSSession::PrepareAppendL()
hgs
parents:
diff changeset
   631
	{
hgs
parents:
diff changeset
   632
	if( !iStorageManager )
hgs
parents:
diff changeset
   633
		{
hgs
parents:
diff changeset
   634
		iStorageManager = CBSStorageManager::NewL( this, *iApplicationId );
hgs
parents:
diff changeset
   635
		}
hgs
parents:
diff changeset
   636
		
hgs
parents:
diff changeset
   637
	RFile brandHandle;
hgs
parents:
diff changeset
   638
	iStorageManager->BrandHandleL( *iApplicationId,
hgs
parents:
diff changeset
   639
								   *iBrandId, iLanguageId, brandHandle, iReserved );
hgs
parents:
diff changeset
   640
	CleanupClosePushL( brandHandle );
hgs
parents:
diff changeset
   641
	RFileReadStream oldStream;
hgs
parents:
diff changeset
   642
	oldStream.Attach( brandHandle );
hgs
parents:
diff changeset
   643
	CleanupClosePushL( oldStream );
hgs
parents:
diff changeset
   644
	TInt version = oldStream.ReadInt16L();
hgs
parents:
diff changeset
   645
hgs
parents:
diff changeset
   646
	TInt count = oldStream.ReadInt16L();
hgs
parents:
diff changeset
   647
	
hgs
parents:
diff changeset
   648
	if( !iStorageManager->Storage() )
hgs
parents:
diff changeset
   649
		{
hgs
parents:
diff changeset
   650
		iStorageManager->CreateStorageL();
hgs
parents:
diff changeset
   651
		}
hgs
parents:
diff changeset
   652
	for( TInt i = 0; i < count; i++ )
hgs
parents:
diff changeset
   653
		{
hgs
parents:
diff changeset
   654
		MBSElement* element = InternalizeElementL( oldStream, ETrue );
hgs
parents:
diff changeset
   655
		CleanupDeletePushL( element );
hgs
parents:
diff changeset
   656
		// transfers ownership
hgs
parents:
diff changeset
   657
		iStorageManager->Storage()->AppendElementsL( element );
hgs
parents:
diff changeset
   658
		CleanupStack::Pop(); // element
hgs
parents:
diff changeset
   659
		}
hgs
parents:
diff changeset
   660
hgs
parents:
diff changeset
   661
	iStorageManager->Storage()->SetVersion( iReserved );
hgs
parents:
diff changeset
   662
	iStorageManager->Storage()->SetStorageIdL( *iBrandId );
hgs
parents:
diff changeset
   663
	iStorageManager->Storage()->SetApplicationIdL( *iApplicationId );
hgs
parents:
diff changeset
   664
	iStorageManager->Storage()->SetLanguageL( iLanguageId );
hgs
parents:
diff changeset
   665
hgs
parents:
diff changeset
   666
	CleanupStack::PopAndDestroy( 2 ); // oldStream, brandHandle
hgs
parents:
diff changeset
   667
	iAppending = ETrue;
hgs
parents:
diff changeset
   668
	}
hgs
parents:
diff changeset
   669
// ---------------------------------------------------------
hgs
parents:
diff changeset
   670
// CBSSession::PrepareReplaceL
hgs
parents:
diff changeset
   671
//
hgs
parents:
diff changeset
   672
// (other items were commented in a header).
hgs
parents:
diff changeset
   673
// ---------------------------------------------------------
hgs
parents:
diff changeset
   674
//
hgs
parents:
diff changeset
   675
void CBSSession::PrepareReplaceL()
hgs
parents:
diff changeset
   676
	{
hgs
parents:
diff changeset
   677
	PrepareAppendL();
hgs
parents:
diff changeset
   678
	}
hgs
parents:
diff changeset
   679
	
hgs
parents:
diff changeset
   680
// ---------------------------------------------------------
hgs
parents:
diff changeset
   681
// CBSSession::InitAccessL
hgs
parents:
diff changeset
   682
//
hgs
parents:
diff changeset
   683
// (other items were commented in a header).
hgs
parents:
diff changeset
   684
// ---------------------------------------------------------
hgs
parents:
diff changeset
   685
//
hgs
parents:
diff changeset
   686
void CBSSession::InitAccessL( const RMessage2 &aMessage )
hgs
parents:
diff changeset
   687
	{
hgs
parents:
diff changeset
   688
	InitUpdateL( aMessage, EBSTxAccess );
hgs
parents:
diff changeset
   689
	
hgs
parents:
diff changeset
   690
	iBranding = CBSBrandHandler::NewL( *iApplicationId, *iBrandId, *iDefaultBrandId,
hgs
parents:
diff changeset
   691
										iLanguageId, this, iReserved );
hgs
parents:
diff changeset
   692
hgs
parents:
diff changeset
   693
hgs
parents:
diff changeset
   694
	iAccessInit = ETrue;
hgs
parents:
diff changeset
   695
    TRACE( T_LIT("Access initialized") );
hgs
parents:
diff changeset
   696
	}
hgs
parents:
diff changeset
   697
hgs
parents:
diff changeset
   698
hgs
parents:
diff changeset
   699
// ---------------------------------------------------------
hgs
parents:
diff changeset
   700
// CBSSession::GetTextL
hgs
parents:
diff changeset
   701
//
hgs
parents:
diff changeset
   702
// (other items were commented in a header).
hgs
parents:
diff changeset
   703
// ---------------------------------------------------------
hgs
parents:
diff changeset
   704
//
hgs
parents:
diff changeset
   705
void CBSSession::GetTextL( const RMessage2 &aMessage )
hgs
parents:
diff changeset
   706
	{
hgs
parents:
diff changeset
   707
	if( !iAccessInit )
hgs
parents:
diff changeset
   708
		{
hgs
parents:
diff changeset
   709
		User::Leave( KErrNotReady );
hgs
parents:
diff changeset
   710
		}
hgs
parents:
diff changeset
   711
	TInt idSize( aMessage.GetDesLength( 0 ) );
hgs
parents:
diff changeset
   712
hgs
parents:
diff changeset
   713
    HBufC8* idBuffer = HBufC8::NewLC( idSize );
hgs
parents:
diff changeset
   714
	TPtr8 ptrId = idBuffer->Des();
hgs
parents:
diff changeset
   715
	aMessage.ReadL( 0, ptrId );
hgs
parents:
diff changeset
   716
hgs
parents:
diff changeset
   717
    HBufC* temp = iBranding->GetTextL( ptrId );
hgs
parents:
diff changeset
   718
    delete iText;
hgs
parents:
diff changeset
   719
    iText = temp;
hgs
parents:
diff changeset
   720
hgs
parents:
diff changeset
   721
    CleanupStack::PopAndDestroy( idBuffer );
hgs
parents:
diff changeset
   722
    TPckgC<TInt> pack( iText->Size() );
hgs
parents:
diff changeset
   723
    aMessage.WriteL( 1, pack );
hgs
parents:
diff changeset
   724
    TRACE( T_LIT("aMessage.WriteL( 1, %d );"), iText->Size() );
hgs
parents:
diff changeset
   725
	}
hgs
parents:
diff changeset
   726
hgs
parents:
diff changeset
   727
void CBSSession :: isBrandUpdateRequiredL (const RMessage2 &aMessage)
hgs
parents:
diff changeset
   728
{
hgs
parents:
diff changeset
   729
	if( !iAccessInit )
hgs
parents:
diff changeset
   730
		{
hgs
parents:
diff changeset
   731
		User::Leave( KErrNotReady );
hgs
parents:
diff changeset
   732
		}
hgs
parents:
diff changeset
   733
	TInt updateRequired = iBranding->isBrandUpdateRequiredL ();
hgs
parents:
diff changeset
   734
//	iValue = updateRequired;
hgs
parents:
diff changeset
   735
	TPckgC <TInt> pack (updateRequired);
hgs
parents:
diff changeset
   736
	aMessage.WriteL( 0, pack );
hgs
parents:
diff changeset
   737
}
hgs
parents:
diff changeset
   738
// ---------------------------------------------------------
hgs
parents:
diff changeset
   739
// CBSSession::GetIntL
hgs
parents:
diff changeset
   740
//
hgs
parents:
diff changeset
   741
// (other items were commented in a header).
hgs
parents:
diff changeset
   742
// ---------------------------------------------------------
hgs
parents:
diff changeset
   743
//
hgs
parents:
diff changeset
   744
void CBSSession::GetIntL( const RMessage2 &aMessage )
hgs
parents:
diff changeset
   745
	{
hgs
parents:
diff changeset
   746
	if( !iInitialized )
hgs
parents:
diff changeset
   747
		{
hgs
parents:
diff changeset
   748
		User::Leave( KErrNotReady );
hgs
parents:
diff changeset
   749
		}
hgs
parents:
diff changeset
   750
	TInt idSize( aMessage.GetDesLength( 0 ) );
hgs
parents:
diff changeset
   751
hgs
parents:
diff changeset
   752
	HBufC8* idBuffer = HBufC8::NewLC( idSize );
hgs
parents:
diff changeset
   753
	TPtr8 ptrId = idBuffer->Des();
hgs
parents:
diff changeset
   754
	aMessage.ReadL( 0, ptrId );
hgs
parents:
diff changeset
   755
hgs
parents:
diff changeset
   756
	iValue = iBranding->GetIntL( ptrId );
hgs
parents:
diff changeset
   757
	TPckgC<TInt> pack( iValue );
hgs
parents:
diff changeset
   758
	aMessage.WriteL( 1, pack );
hgs
parents:
diff changeset
   759
	CleanupStack::PopAndDestroy( idBuffer );
hgs
parents:
diff changeset
   760
	}
hgs
parents:
diff changeset
   761
hgs
parents:
diff changeset
   762
// ---------------------------------------------------------
hgs
parents:
diff changeset
   763
// CBSSession::GetBufferL
hgs
parents:
diff changeset
   764
//
hgs
parents:
diff changeset
   765
// (other items were commented in a header).
hgs
parents:
diff changeset
   766
// ---------------------------------------------------------
hgs
parents:
diff changeset
   767
//
hgs
parents:
diff changeset
   768
void CBSSession::GetBufferL( const RMessage2 &aMessage )
hgs
parents:
diff changeset
   769
	{
hgs
parents:
diff changeset
   770
	if( !iAccessInit )
hgs
parents:
diff changeset
   771
		{
hgs
parents:
diff changeset
   772
		User::Leave( KErrNotReady );
hgs
parents:
diff changeset
   773
		}
hgs
parents:
diff changeset
   774
	TInt idSize( aMessage.GetDesLength( 0 ) );
hgs
parents:
diff changeset
   775
hgs
parents:
diff changeset
   776
    HBufC8* idBuffer = HBufC8::NewLC( idSize );
hgs
parents:
diff changeset
   777
	TPtr8 ptrId = idBuffer->Des();
hgs
parents:
diff changeset
   778
	aMessage.ReadL( 0, ptrId );
hgs
parents:
diff changeset
   779
hgs
parents:
diff changeset
   780
    HBufC8* temp = iBranding->GetBufferL( ptrId );
hgs
parents:
diff changeset
   781
    delete iBuffer;
hgs
parents:
diff changeset
   782
    iBuffer = temp;
hgs
parents:
diff changeset
   783
hgs
parents:
diff changeset
   784
    CleanupStack::PopAndDestroy( idBuffer );
hgs
parents:
diff changeset
   785
    TPckgC<TInt> pack( iBuffer->Size() );
hgs
parents:
diff changeset
   786
    aMessage.WriteL( 1, pack );
hgs
parents:
diff changeset
   787
    TRACE( T_LIT("aMessage.WriteL( 1, %d );"), iBuffer->Size() );
hgs
parents:
diff changeset
   788
	}
hgs
parents:
diff changeset
   789
hgs
parents:
diff changeset
   790
hgs
parents:
diff changeset
   791
// ---------------------------------------------------------
hgs
parents:
diff changeset
   792
// CBSSession::GetFileL
hgs
parents:
diff changeset
   793
//
hgs
parents:
diff changeset
   794
// (other items were commented in a header).
hgs
parents:
diff changeset
   795
// ---------------------------------------------------------
hgs
parents:
diff changeset
   796
//
hgs
parents:
diff changeset
   797
void CBSSession::GetFileL( const RMessage2 &aMessage )
hgs
parents:
diff changeset
   798
	{
hgs
parents:
diff changeset
   799
    TRACE( T_LIT("CBSSession::GetFileL begin") );
hgs
parents:
diff changeset
   800
    if( !iInitialized )
hgs
parents:
diff changeset
   801
		{
hgs
parents:
diff changeset
   802
		User::Leave( KErrNotReady );
hgs
parents:
diff changeset
   803
		}
hgs
parents:
diff changeset
   804
	TInt idSize( aMessage.GetDesLength( 2 ) );
hgs
parents:
diff changeset
   805
	HBufC8* idBuffer = HBufC8::NewLC( idSize );
hgs
parents:
diff changeset
   806
	TPtr8 ptrId = idBuffer->Des();
hgs
parents:
diff changeset
   807
	aMessage.ReadL( 2, ptrId );
hgs
parents:
diff changeset
   808
hgs
parents:
diff changeset
   809
	RFile file;
hgs
parents:
diff changeset
   810
    iBranding->GetFileL( ptrId, file );
hgs
parents:
diff changeset
   811
hgs
parents:
diff changeset
   812
	CleanupStack::PopAndDestroy( idBuffer );
hgs
parents:
diff changeset
   813
hgs
parents:
diff changeset
   814
	User::LeaveIfError( file.TransferToClient( aMessage, 0 ) );
hgs
parents:
diff changeset
   815
hgs
parents:
diff changeset
   816
	iMessageCompleted = ETrue;
hgs
parents:
diff changeset
   817
hgs
parents:
diff changeset
   818
	file.Close();
hgs
parents:
diff changeset
   819
	TRACE( T_LIT("CBSSession::GetFileL end") );
hgs
parents:
diff changeset
   820
	}
hgs
parents:
diff changeset
   821
hgs
parents:
diff changeset
   822
hgs
parents:
diff changeset
   823
// ---------------------------------------------------------
hgs
parents:
diff changeset
   824
// CBSSession::InternalizeElementIdsL
hgs
parents:
diff changeset
   825
//
hgs
parents:
diff changeset
   826
// (other items were commented in a header).
hgs
parents:
diff changeset
   827
// ---------------------------------------------------------
hgs
parents:
diff changeset
   828
//
hgs
parents:
diff changeset
   829
void CBSSession::InternalizeElementIdsL( RReadStream& aStream, RBSObjOwningPtrArray<HBufC8>& aArray )
hgs
parents:
diff changeset
   830
	{
hgs
parents:
diff changeset
   831
	TInt count = aStream.ReadInt16L();
hgs
parents:
diff changeset
   832
	
hgs
parents:
diff changeset
   833
	for(TInt i = 0; i < count; i++ )
hgs
parents:
diff changeset
   834
		{
hgs
parents:
diff changeset
   835
		TInt length = aStream.ReadInt16L();
hgs
parents:
diff changeset
   836
		HBufC8* id = HBufC8::NewLC( length );
hgs
parents:
diff changeset
   837
		TPtr8 ptrId = id->Des();
hgs
parents:
diff changeset
   838
		aStream.ReadL( ptrId, length );
hgs
parents:
diff changeset
   839
		aArray.AppendL( id );
hgs
parents:
diff changeset
   840
		CleanupStack::Pop( id );
hgs
parents:
diff changeset
   841
		}
hgs
parents:
diff changeset
   842
	}
hgs
parents:
diff changeset
   843
hgs
parents:
diff changeset
   844
// ---------------------------------------------------------
hgs
parents:
diff changeset
   845
// CBSSession::PrepareTextL
hgs
parents:
diff changeset
   846
//
hgs
parents:
diff changeset
   847
// (other items were commented in a header).
hgs
parents:
diff changeset
   848
// ---------------------------------------------------------
hgs
parents:
diff changeset
   849
//
hgs
parents:
diff changeset
   850
void CBSSession::PrepareSeveralL( const RMessage2 &aMessage )
hgs
parents:
diff changeset
   851
	{
hgs
parents:
diff changeset
   852
	if( !iInitialized )
hgs
parents:
diff changeset
   853
		{
hgs
parents:
diff changeset
   854
		User::Leave( KErrNotReady );
hgs
parents:
diff changeset
   855
		}
hgs
parents:
diff changeset
   856
		
hgs
parents:
diff changeset
   857
	TInt msgSize( aMessage.GetDesLength( 1 ) );
hgs
parents:
diff changeset
   858
hgs
parents:
diff changeset
   859
    HBufC8* idBuffer = HBufC8::NewLC( msgSize );
hgs
parents:
diff changeset
   860
	TPtr8 ptrId = idBuffer->Des();
hgs
parents:
diff changeset
   861
	aMessage.ReadL( 1, ptrId );
hgs
parents:
diff changeset
   862
hgs
parents:
diff changeset
   863
	RDesReadStream idStream;
hgs
parents:
diff changeset
   864
	CleanupClosePushL( idStream );
hgs
parents:
diff changeset
   865
	idStream.Open( ptrId );
hgs
parents:
diff changeset
   866
hgs
parents:
diff changeset
   867
	RBSObjOwningPtrArray<HBufC8> idArray;
hgs
parents:
diff changeset
   868
	CleanupClosePushL( idArray );
hgs
parents:
diff changeset
   869
	
hgs
parents:
diff changeset
   870
	InternalizeElementIdsL( idStream, idArray );
hgs
parents:
diff changeset
   871
hgs
parents:
diff changeset
   872
hgs
parents:
diff changeset
   873
	MBSElement* texts = iBranding->GetSeveralL( idArray );
hgs
parents:
diff changeset
   874
hgs
parents:
diff changeset
   875
	CleanupStack::PopAndDestroy(); // idArray
hgs
parents:
diff changeset
   876
	CleanupStack::PopAndDestroy(); // idStream
hgs
parents:
diff changeset
   877
	CleanupStack::PopAndDestroy();  // idBuffer
hgs
parents:
diff changeset
   878
hgs
parents:
diff changeset
   879
	CleanupDeletePushL( texts );
hgs
parents:
diff changeset
   880
hgs
parents:
diff changeset
   881
	// FIXME magic number
hgs
parents:
diff changeset
   882
	CBufFlat* data = CBufFlat::NewL( 2000 );
hgs
parents:
diff changeset
   883
	CleanupStack::PushL( data );
hgs
parents:
diff changeset
   884
hgs
parents:
diff changeset
   885
	RBufWriteStream writeStream;
hgs
parents:
diff changeset
   886
	CleanupClosePushL( writeStream );
hgs
parents:
diff changeset
   887
	writeStream.Open( *data );
hgs
parents:
diff changeset
   888
hgs
parents:
diff changeset
   889
	texts->ExternalizeL( writeStream );	
hgs
parents:
diff changeset
   890
hgs
parents:
diff changeset
   891
	CleanupStack::PopAndDestroy(); // writeStream
hgs
parents:
diff changeset
   892
	
hgs
parents:
diff changeset
   893
	delete iSeveralData;
hgs
parents:
diff changeset
   894
	iSeveralData = data;
hgs
parents:
diff changeset
   895
	CleanupStack::Pop( data );
hgs
parents:
diff changeset
   896
hgs
parents:
diff changeset
   897
	CleanupStack::PopAndDestroy(); // texts
hgs
parents:
diff changeset
   898
hgs
parents:
diff changeset
   899
	delete iBuffer;
hgs
parents:
diff changeset
   900
	iBuffer = NULL;
hgs
parents:
diff changeset
   901
	iBuffer = iSeveralData->Ptr(0).AllocL();
hgs
parents:
diff changeset
   902
hgs
parents:
diff changeset
   903
	delete iSeveralData;
hgs
parents:
diff changeset
   904
	iSeveralData = NULL;
hgs
parents:
diff changeset
   905
	TPckgC<TInt> pack( iBuffer->Size() );
hgs
parents:
diff changeset
   906
	TRACE( T_LIT("DispatchMessageL - EPlatSecPrepareSeveral writing size %d"), iBuffer->Size() );
hgs
parents:
diff changeset
   907
    aMessage.WriteL( 0, pack );
hgs
parents:
diff changeset
   908
hgs
parents:
diff changeset
   909
	}
hgs
parents:
diff changeset
   910
hgs
parents:
diff changeset
   911
// ---------------------------------------------------------
hgs
parents:
diff changeset
   912
// CBSSession::GetSeveralTextL
hgs
parents:
diff changeset
   913
//
hgs
parents:
diff changeset
   914
// (other items were commented in a header).
hgs
parents:
diff changeset
   915
// ---------------------------------------------------------
hgs
parents:
diff changeset
   916
//
hgs
parents:
diff changeset
   917
void CBSSession::GetSeveralL( const RMessage2 &aMessage )
hgs
parents:
diff changeset
   918
	{
hgs
parents:
diff changeset
   919
	if( !iInitialized )
hgs
parents:
diff changeset
   920
		{
hgs
parents:
diff changeset
   921
		User::Leave( KErrNotReady );
hgs
parents:
diff changeset
   922
		}
hgs
parents:
diff changeset
   923
	aMessage.WriteL( 0, *iBuffer );
hgs
parents:
diff changeset
   924
hgs
parents:
diff changeset
   925
	delete iBuffer;
hgs
parents:
diff changeset
   926
	iBuffer = NULL;
hgs
parents:
diff changeset
   927
	}
hgs
parents:
diff changeset
   928
hgs
parents:
diff changeset
   929
hgs
parents:
diff changeset
   930
// ---------------------------------------------------------
hgs
parents:
diff changeset
   931
// CBSSession::PrepareStructureL
hgs
parents:
diff changeset
   932
//
hgs
parents:
diff changeset
   933
// (other items were commented in a header).
hgs
parents:
diff changeset
   934
// ---------------------------------------------------------
hgs
parents:
diff changeset
   935
//
hgs
parents:
diff changeset
   936
void CBSSession::PrepareStructureL( const RMessage2 &aMessage )
hgs
parents:
diff changeset
   937
	{
hgs
parents:
diff changeset
   938
	if( !iInitialized )
hgs
parents:
diff changeset
   939
		{
hgs
parents:
diff changeset
   940
		User::Leave( KErrNotReady );
hgs
parents:
diff changeset
   941
		}
hgs
parents:
diff changeset
   942
	TInt idSize( aMessage.GetDesLength( 1 ) );
hgs
parents:
diff changeset
   943
hgs
parents:
diff changeset
   944
	RBSObjOwningPtrArray<MBSElement> valueArray;
hgs
parents:
diff changeset
   945
	CleanupClosePushL( valueArray );
hgs
parents:
diff changeset
   946
hgs
parents:
diff changeset
   947
    HBufC8* idBuffer = HBufC8::NewLC( idSize );
hgs
parents:
diff changeset
   948
	TPtr8 ptrId = idBuffer->Des();
hgs
parents:
diff changeset
   949
	aMessage.ReadL( 1, ptrId );
hgs
parents:
diff changeset
   950
hgs
parents:
diff changeset
   951
hgs
parents:
diff changeset
   952
	MBSElement* extElement = iBranding->GetStructureL( ptrId );
hgs
parents:
diff changeset
   953
	CleanupDeletePushL( extElement );
hgs
parents:
diff changeset
   954
	// FIXME magic number
hgs
parents:
diff changeset
   955
	CBufFlat* data = CBufFlat::NewL( 2000 );
hgs
parents:
diff changeset
   956
	CleanupStack::PushL( data );
hgs
parents:
diff changeset
   957
hgs
parents:
diff changeset
   958
	RBufWriteStream writeStream;
hgs
parents:
diff changeset
   959
	CleanupClosePushL( writeStream );
hgs
parents:
diff changeset
   960
	writeStream.Open( *data );
hgs
parents:
diff changeset
   961
hgs
parents:
diff changeset
   962
	extElement->ExternalizeL( writeStream );
hgs
parents:
diff changeset
   963
hgs
parents:
diff changeset
   964
	CleanupStack::PopAndDestroy(); // writeStream
hgs
parents:
diff changeset
   965
hgs
parents:
diff changeset
   966
	delete iSeveralData;
hgs
parents:
diff changeset
   967
	iSeveralData = data;
hgs
parents:
diff changeset
   968
	CleanupStack::Pop( data );
hgs
parents:
diff changeset
   969
hgs
parents:
diff changeset
   970
	CleanupStack::PopAndDestroy( extElement );
hgs
parents:
diff changeset
   971
hgs
parents:
diff changeset
   972
	delete iBuffer;
hgs
parents:
diff changeset
   973
	iBuffer = NULL;
hgs
parents:
diff changeset
   974
	iBuffer = iSeveralData->Ptr(0).AllocL();
hgs
parents:
diff changeset
   975
hgs
parents:
diff changeset
   976
	delete iSeveralData;
hgs
parents:
diff changeset
   977
	iSeveralData = NULL;
hgs
parents:
diff changeset
   978
	TPckgC<TInt> pack( iBuffer->Size() );
hgs
parents:
diff changeset
   979
	TRACE( T_LIT("DispatchMessageL - EPlatSecPrepareSeveral writing size %d"), iBuffer->Size() );
hgs
parents:
diff changeset
   980
    aMessage.WriteL( 0, pack );
hgs
parents:
diff changeset
   981
hgs
parents:
diff changeset
   982
hgs
parents:
diff changeset
   983
	CleanupStack::PopAndDestroy(idBuffer);
hgs
parents:
diff changeset
   984
hgs
parents:
diff changeset
   985
	CleanupStack::PopAndDestroy(); // valueArray
hgs
parents:
diff changeset
   986
hgs
parents:
diff changeset
   987
	}
hgs
parents:
diff changeset
   988
hgs
parents:
diff changeset
   989
// ---------------------------------------------------------
hgs
parents:
diff changeset
   990
// CBSSession::GetStructureL
hgs
parents:
diff changeset
   991
//
hgs
parents:
diff changeset
   992
// (other items were commented in a header).
hgs
parents:
diff changeset
   993
// ---------------------------------------------------------
hgs
parents:
diff changeset
   994
//
hgs
parents:
diff changeset
   995
void CBSSession::GetStructureL( const RMessage2 &aMessage )
hgs
parents:
diff changeset
   996
	{
hgs
parents:
diff changeset
   997
	if( !iInitialized )
hgs
parents:
diff changeset
   998
		{
hgs
parents:
diff changeset
   999
		User::Leave( KErrNotReady );
hgs
parents:
diff changeset
  1000
		}
hgs
parents:
diff changeset
  1001
	aMessage.WriteL( 0, *iBuffer );
hgs
parents:
diff changeset
  1002
hgs
parents:
diff changeset
  1003
	delete iBuffer;
hgs
parents:
diff changeset
  1004
	iBuffer = NULL;
hgs
parents:
diff changeset
  1005
	}
hgs
parents:
diff changeset
  1006
hgs
parents:
diff changeset
  1007
hgs
parents:
diff changeset
  1008
hgs
parents:
diff changeset
  1009
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1010
// CBSSession::InstallL
hgs
parents:
diff changeset
  1011
//
hgs
parents:
diff changeset
  1012
// (other items were commented in a header).
hgs
parents:
diff changeset
  1013
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1014
//
hgs
parents:
diff changeset
  1015
void CBSSession::InstallL( const RMessage2 &aMessage )
hgs
parents:
diff changeset
  1016
	{
hgs
parents:
diff changeset
  1017
	TRACE( T_LIT( "CBSSession::InstallL begin") );
hgs
parents:
diff changeset
  1018
	if( !iInitialized || !iStorageManager )
hgs
parents:
diff changeset
  1019
		{
hgs
parents:
diff changeset
  1020
		User::Leave( KErrNotReady );
hgs
parents:
diff changeset
  1021
		}
hgs
parents:
diff changeset
  1022
hgs
parents:
diff changeset
  1023
	if( !iStorageManager->Storage() )
hgs
parents:
diff changeset
  1024
		{
hgs
parents:
diff changeset
  1025
		iStorageManager->CreateStorageL();
hgs
parents:
diff changeset
  1026
		}
hgs
parents:
diff changeset
  1027
	
hgs
parents:
diff changeset
  1028
	iStorageManager->ConnectTransactionL( *iApplicationId,
hgs
parents:
diff changeset
  1029
										  *iBrandId, iLanguageId, EFalse, iReserved );
hgs
parents:
diff changeset
  1030
hgs
parents:
diff changeset
  1031
	TInt msgSize( aMessage.GetDesLength( 0 ) );
hgs
parents:
diff changeset
  1032
hgs
parents:
diff changeset
  1033
    HBufC8* buffer = HBufC8::NewLC( msgSize );
hgs
parents:
diff changeset
  1034
	TPtr8 ptr = buffer->Des();
hgs
parents:
diff changeset
  1035
	aMessage.ReadL( 0, ptr );
hgs
parents:
diff changeset
  1036
hgs
parents:
diff changeset
  1037
	RDesReadStream stream;
hgs
parents:
diff changeset
  1038
	CleanupClosePushL( stream );
hgs
parents:
diff changeset
  1039
	stream.Open( ptr );
hgs
parents:
diff changeset
  1040
hgs
parents:
diff changeset
  1041
	MBSElement* element = InternalizeElementL( stream );
hgs
parents:
diff changeset
  1042
	CleanupDeletePushL( element );
hgs
parents:
diff changeset
  1043
hgs
parents:
diff changeset
  1044
	iStorageManager->Storage()->SetVersion( iReserved );
hgs
parents:
diff changeset
  1045
	iStorageManager->Storage()->SetStorageIdL( *iBrandId );
hgs
parents:
diff changeset
  1046
	iStorageManager->Storage()->SetApplicationIdL( *iApplicationId );
hgs
parents:
diff changeset
  1047
	iStorageManager->Storage()->SetLanguageL( iLanguageId );
hgs
parents:
diff changeset
  1048
	// transfers ownership
hgs
parents:
diff changeset
  1049
	iStorageManager->Storage()->AppendElementsL( element );
hgs
parents:
diff changeset
  1050
hgs
parents:
diff changeset
  1051
	CleanupStack::Pop(); // element 
hgs
parents:
diff changeset
  1052
	CleanupStack::PopAndDestroy( 2, buffer );
hgs
parents:
diff changeset
  1053
	iWriteNeeded = ETrue;
hgs
parents:
diff changeset
  1054
	TRACE( T_LIT( "CBSSession::InstallL end") );
hgs
parents:
diff changeset
  1055
	}
hgs
parents:
diff changeset
  1056
hgs
parents:
diff changeset
  1057
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1058
// CBSSession::ReplaceL
hgs
parents:
diff changeset
  1059
//
hgs
parents:
diff changeset
  1060
// (other items were commented in a header).
hgs
parents:
diff changeset
  1061
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1062
//
hgs
parents:
diff changeset
  1063
void CBSSession::ReplaceL( const RMessage2 &aMessage )
hgs
parents:
diff changeset
  1064
	{
hgs
parents:
diff changeset
  1065
	TRACE( T_LIT( "CBSSession::ReplaceL begin") );
hgs
parents:
diff changeset
  1066
	if( !iInitialized || !iStorageManager )
hgs
parents:
diff changeset
  1067
		{
hgs
parents:
diff changeset
  1068
		User::Leave( KErrNotReady );
hgs
parents:
diff changeset
  1069
		}
hgs
parents:
diff changeset
  1070
		
hgs
parents:
diff changeset
  1071
	iStorageManager->ConnectTransactionL( *iApplicationId,
hgs
parents:
diff changeset
  1072
										  *iBrandId, iLanguageId, EFalse, iReserved );
hgs
parents:
diff changeset
  1073
hgs
parents:
diff changeset
  1074
	TInt msgSize( aMessage.GetDesLength( 0 ) );
hgs
parents:
diff changeset
  1075
hgs
parents:
diff changeset
  1076
    HBufC8* buffer = HBufC8::NewLC( msgSize );
hgs
parents:
diff changeset
  1077
	TPtr8 ptr = buffer->Des();
hgs
parents:
diff changeset
  1078
	aMessage.ReadL( 0, ptr );
hgs
parents:
diff changeset
  1079
hgs
parents:
diff changeset
  1080
	RDesReadStream stream;
hgs
parents:
diff changeset
  1081
	CleanupClosePushL( stream );
hgs
parents:
diff changeset
  1082
	stream.Open( ptr );
hgs
parents:
diff changeset
  1083
hgs
parents:
diff changeset
  1084
	MBSElement* element = InternalizeElementL( stream );
hgs
parents:
diff changeset
  1085
	CleanupDeletePushL( element );
hgs
parents:
diff changeset
  1086
hgs
parents:
diff changeset
  1087
	// transfers ownership
hgs
parents:
diff changeset
  1088
	iStorageManager->Storage()->ReplaceElementL( element );
hgs
parents:
diff changeset
  1089
hgs
parents:
diff changeset
  1090
	CleanupStack::Pop(); // element 
hgs
parents:
diff changeset
  1091
	CleanupStack::PopAndDestroy( 2, buffer );
hgs
parents:
diff changeset
  1092
	iWriteNeeded = ETrue;
hgs
parents:
diff changeset
  1093
	TRACE( T_LIT( "CBSSession::ReplaceL end") );
hgs
parents:
diff changeset
  1094
	}
hgs
parents:
diff changeset
  1095
hgs
parents:
diff changeset
  1096
hgs
parents:
diff changeset
  1097
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1098
// CBSSession::AppendL
hgs
parents:
diff changeset
  1099
//
hgs
parents:
diff changeset
  1100
// (other items were commented in a header).
hgs
parents:
diff changeset
  1101
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1102
//
hgs
parents:
diff changeset
  1103
void CBSSession::AppendL( const RMessage2 &aMessage )
hgs
parents:
diff changeset
  1104
	{
hgs
parents:
diff changeset
  1105
	TRACE( T_LIT( "CBSSession::AppendL begin") );
hgs
parents:
diff changeset
  1106
	if( !iInitialized || !iStorageManager )
hgs
parents:
diff changeset
  1107
		{
hgs
parents:
diff changeset
  1108
		User::Leave( KErrNotReady );
hgs
parents:
diff changeset
  1109
		}
hgs
parents:
diff changeset
  1110
	
hgs
parents:
diff changeset
  1111
	iStorageManager->ConnectTransactionL( *iApplicationId,
hgs
parents:
diff changeset
  1112
										  *iBrandId, iLanguageId, EFalse, iReserved );
hgs
parents:
diff changeset
  1113
hgs
parents:
diff changeset
  1114
	TInt msgSize( aMessage.GetDesLength( 0 ) );
hgs
parents:
diff changeset
  1115
hgs
parents:
diff changeset
  1116
    HBufC8* buffer = HBufC8::NewLC( msgSize );
hgs
parents:
diff changeset
  1117
	TPtr8 ptr = buffer->Des();
hgs
parents:
diff changeset
  1118
	aMessage.ReadL( 0, ptr );
hgs
parents:
diff changeset
  1119
hgs
parents:
diff changeset
  1120
	RDesReadStream stream;
hgs
parents:
diff changeset
  1121
	CleanupClosePushL( stream );
hgs
parents:
diff changeset
  1122
	stream.Open( ptr );
hgs
parents:
diff changeset
  1123
hgs
parents:
diff changeset
  1124
	MBSElement* element = InternalizeElementL( stream );
hgs
parents:
diff changeset
  1125
	CleanupDeletePushL( element );
hgs
parents:
diff changeset
  1126
hgs
parents:
diff changeset
  1127
	iStorageManager->Storage()->SetVersion( iReserved );
hgs
parents:
diff changeset
  1128
	iStorageManager->Storage()->SetStorageIdL( *iBrandId );
hgs
parents:
diff changeset
  1129
	iStorageManager->Storage()->SetApplicationIdL( *iApplicationId );
hgs
parents:
diff changeset
  1130
	iStorageManager->Storage()->SetLanguageL( iLanguageId );
hgs
parents:
diff changeset
  1131
	// transfers ownership
hgs
parents:
diff changeset
  1132
	iStorageManager->Storage()->AppendElementsL( element );
hgs
parents:
diff changeset
  1133
hgs
parents:
diff changeset
  1134
	CleanupStack::Pop(); // element 
hgs
parents:
diff changeset
  1135
	CleanupStack::PopAndDestroy( 2, buffer );
hgs
parents:
diff changeset
  1136
	iWriteNeeded = ETrue;
hgs
parents:
diff changeset
  1137
    TRACE( T_LIT( "CBSSession::AppendL end") );
hgs
parents:
diff changeset
  1138
	}
hgs
parents:
diff changeset
  1139
hgs
parents:
diff changeset
  1140
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1141
// CBSSession::StartTransactionL
hgs
parents:
diff changeset
  1142
//
hgs
parents:
diff changeset
  1143
// (other items were commented in a header).
hgs
parents:
diff changeset
  1144
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1145
//
hgs
parents:
diff changeset
  1146
void CBSSession::StartTransactionL( const RMessage2& /*aMessage*/ )
hgs
parents:
diff changeset
  1147
	{
hgs
parents:
diff changeset
  1148
	if( !iStorageManager )
hgs
parents:
diff changeset
  1149
		{
hgs
parents:
diff changeset
  1150
		iStorageManager = CBSStorageManager::NewL( this, *iApplicationId );
hgs
parents:
diff changeset
  1151
		}
hgs
parents:
diff changeset
  1152
	// if we are appending or replacing, we don't need to 
hgs
parents:
diff changeset
  1153
	// create storage
hgs
parents:
diff changeset
  1154
	if( !iAppending )
hgs
parents:
diff changeset
  1155
		{
hgs
parents:
diff changeset
  1156
		iStorageManager->CreateStorageL();	
hgs
parents:
diff changeset
  1157
		}
hgs
parents:
diff changeset
  1158
	}
hgs
parents:
diff changeset
  1159
hgs
parents:
diff changeset
  1160
hgs
parents:
diff changeset
  1161
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1162
// CBSSession::CancelTransactionL
hgs
parents:
diff changeset
  1163
//
hgs
parents:
diff changeset
  1164
// (other items were commented in a header).
hgs
parents:
diff changeset
  1165
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1166
//
hgs
parents:
diff changeset
  1167
void CBSSession::CancelTransactionL( const RMessage2 &aMessage )
hgs
parents:
diff changeset
  1168
	{
hgs
parents:
diff changeset
  1169
	// get the application id
hgs
parents:
diff changeset
  1170
	TInt bufferSize( aMessage.GetDesLength( 0 ) );
hgs
parents:
diff changeset
  1171
hgs
parents:
diff changeset
  1172
    HBufC8* appId = HBufC8::NewLC( bufferSize );
hgs
parents:
diff changeset
  1173
	TPtr8 appPtr = appId->Des();
hgs
parents:
diff changeset
  1174
	aMessage.ReadL( 0, appPtr );
hgs
parents:
diff changeset
  1175
hgs
parents:
diff changeset
  1176
hgs
parents:
diff changeset
  1177
	// get the brand id
hgs
parents:
diff changeset
  1178
	bufferSize = aMessage.GetDesLength( 1 );
hgs
parents:
diff changeset
  1179
    HBufC8* brandId = HBufC8::NewLC( bufferSize );
hgs
parents:
diff changeset
  1180
	TPtr8 brandPtr = brandId->Des();
hgs
parents:
diff changeset
  1181
	aMessage.ReadL( 1, brandPtr );
hgs
parents:
diff changeset
  1182
hgs
parents:
diff changeset
  1183
	// get the language id
hgs
parents:
diff changeset
  1184
	TLanguage language = (TLanguage)aMessage.Int2();
hgs
parents:
diff changeset
  1185
hgs
parents:
diff changeset
  1186
	// get the version
hgs
parents:
diff changeset
  1187
	TInt version = aMessage.Int3();
hgs
parents:
diff changeset
  1188
	
hgs
parents:
diff changeset
  1189
	
hgs
parents:
diff changeset
  1190
	HBufC* tmpBrandId = CnvUtfConverter::ConvertToUnicodeFromUtf8L( *brandId );
hgs
parents:
diff changeset
  1191
	CleanupStack::PopAndDestroy( brandId );
hgs
parents:
diff changeset
  1192
	CleanupStack::PushL( tmpBrandId );
hgs
parents:
diff changeset
  1193
	HBufC* tmpAppId = CnvUtfConverter::ConvertToUnicodeFromUtf8L( *appId );
hgs
parents:
diff changeset
  1194
	CleanupStack::PushL( tmpAppId );
hgs
parents:
diff changeset
  1195
	
hgs
parents:
diff changeset
  1196
	// check if the transaction is correct	
hgs
parents:
diff changeset
  1197
	iStorageManager->ConnectTransactionL( *tmpAppId,
hgs
parents:
diff changeset
  1198
										  *tmpBrandId, iLanguageId,
hgs
parents:
diff changeset
  1199
										  EFalse, iReserved );
hgs
parents:
diff changeset
  1200
hgs
parents:
diff changeset
  1201
	CleanupStack::PopAndDestroy( 2, tmpBrandId ); // tmpBrandId, tmpAppId
hgs
parents:
diff changeset
  1202
	CleanupStack::PopAndDestroy( appId );
hgs
parents:
diff changeset
  1203
	// cancel the transaction
hgs
parents:
diff changeset
  1204
	iStorageManager->CancelTransactionL();
hgs
parents:
diff changeset
  1205
	iWriteNeeded = EFalse;
hgs
parents:
diff changeset
  1206
	}
hgs
parents:
diff changeset
  1207
hgs
parents:
diff changeset
  1208
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1209
// CBSSession::StopTransactionL
hgs
parents:
diff changeset
  1210
//
hgs
parents:
diff changeset
  1211
// (other items were commented in a header).
hgs
parents:
diff changeset
  1212
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1213
//
hgs
parents:
diff changeset
  1214
void CBSSession::StopTransactionL( const RMessage2 &aMessage )
hgs
parents:
diff changeset
  1215
	{
hgs
parents:
diff changeset
  1216
	if( !iStorageManager )
hgs
parents:
diff changeset
  1217
		{
hgs
parents:
diff changeset
  1218
		// transaction not found
hgs
parents:
diff changeset
  1219
		User::Leave( KErrNotFound );
hgs
parents:
diff changeset
  1220
		}
hgs
parents:
diff changeset
  1221
	if( iAppending )
hgs
parents:
diff changeset
  1222
		{
hgs
parents:
diff changeset
  1223
		// find next available version number
hgs
parents:
diff changeset
  1224
		TInt nextVersion = iStorageManager->NextAvailableVersionL();
hgs
parents:
diff changeset
  1225
		iStorageManager->SetVersion( nextVersion );
hgs
parents:
diff changeset
  1226
		iStorageManager->Storage()->SetVersion( nextVersion );
hgs
parents:
diff changeset
  1227
		}
hgs
parents:
diff changeset
  1228
		
hgs
parents:
diff changeset
  1229
	if( iWriteNeeded )
hgs
parents:
diff changeset
  1230
		{
hgs
parents:
diff changeset
  1231
		iReserved = iStorageManager->WriteStorageFilesL();	
hgs
parents:
diff changeset
  1232
		iWriteNeeded = EFalse;
hgs
parents:
diff changeset
  1233
		}
hgs
parents:
diff changeset
  1234
	
hgs
parents:
diff changeset
  1235
	delete iStorageManager;
hgs
parents:
diff changeset
  1236
	iStorageManager = NULL;
hgs
parents:
diff changeset
  1237
	
hgs
parents:
diff changeset
  1238
	TPckgC<TInt> pack( iReserved );
hgs
parents:
diff changeset
  1239
	aMessage.WriteL( 0, pack );
hgs
parents:
diff changeset
  1240
	
hgs
parents:
diff changeset
  1241
	}
hgs
parents:
diff changeset
  1242
hgs
parents:
diff changeset
  1243
hgs
parents:
diff changeset
  1244
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1245
// CBSSession::InternalizeElementL
hgs
parents:
diff changeset
  1246
//
hgs
parents:
diff changeset
  1247
// (other items were commented in a header).
hgs
parents:
diff changeset
  1248
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1249
//
hgs
parents:
diff changeset
  1250
MBSElement* CBSSession::InternalizeElementL( RReadStream& aStream, TBool aAppending /*= EFalse*/ )
hgs
parents:
diff changeset
  1251
	{
hgs
parents:
diff changeset
  1252
	MBSElement* returnValue = NULL;
hgs
parents:
diff changeset
  1253
hgs
parents:
diff changeset
  1254
	TBSElementType type = (TBSElementType)aStream.ReadInt16L();
hgs
parents:
diff changeset
  1255
	TInt idSize = aStream.ReadInt16L();
hgs
parents:
diff changeset
  1256
	HBufC8* elementId = HBufC8::NewLC( idSize );
hgs
parents:
diff changeset
  1257
	TPtr8 elementIdPtr = elementId->Des();
hgs
parents:
diff changeset
  1258
	aStream.ReadL( elementIdPtr, idSize );
hgs
parents:
diff changeset
  1259
hgs
parents:
diff changeset
  1260
hgs
parents:
diff changeset
  1261
	switch( type )
hgs
parents:
diff changeset
  1262
		{
hgs
parents:
diff changeset
  1263
		case EBSInt:
hgs
parents:
diff changeset
  1264
			{
hgs
parents:
diff changeset
  1265
			TInt intData = aStream.ReadInt16L();
hgs
parents:
diff changeset
  1266
			returnValue = BSElementFactory::CreateBSElementL( *elementId,
hgs
parents:
diff changeset
  1267
															   EBSInt,
hgs
parents:
diff changeset
  1268
															   intData );
hgs
parents:
diff changeset
  1269
			break;
hgs
parents:
diff changeset
  1270
			}
hgs
parents:
diff changeset
  1271
		case EBSText:
hgs
parents:
diff changeset
  1272
			{
hgs
parents:
diff changeset
  1273
			TInt textSize = aStream.ReadInt16L();
hgs
parents:
diff changeset
  1274
			HBufC* textData = HBufC::NewLC( textSize );
hgs
parents:
diff changeset
  1275
hgs
parents:
diff changeset
  1276
			TPtr textPtr = textData->Des();
hgs
parents:
diff changeset
  1277
			aStream.ReadL( textPtr, textSize );
hgs
parents:
diff changeset
  1278
hgs
parents:
diff changeset
  1279
			returnValue = BSElementFactory::CreateBSElementL( *elementId,
hgs
parents:
diff changeset
  1280
															   type,
hgs
parents:
diff changeset
  1281
															   *textData );
hgs
parents:
diff changeset
  1282
hgs
parents:
diff changeset
  1283
			CleanupStack::Pop( textData );
hgs
parents:
diff changeset
  1284
			break;
hgs
parents:
diff changeset
  1285
			}
hgs
parents:
diff changeset
  1286
hgs
parents:
diff changeset
  1287
		case EBSFile: 
hgs
parents:
diff changeset
  1288
			{
hgs
parents:
diff changeset
  1289
			TInt nameSize = aStream.ReadInt16L();
hgs
parents:
diff changeset
  1290
			HBufC* fileName = HBufC::NewLC( nameSize );
hgs
parents:
diff changeset
  1291
hgs
parents:
diff changeset
  1292
			TPtr filePtr = fileName->Des();
hgs
parents:
diff changeset
  1293
			aStream.ReadL( filePtr, nameSize );
hgs
parents:
diff changeset
  1294
			
hgs
parents:
diff changeset
  1295
			if( !aAppending )
hgs
parents:
diff changeset
  1296
				{
hgs
parents:
diff changeset
  1297
				// we are installing, so the filename is pointing to a file
hgs
parents:
diff changeset
  1298
				// that has to be installed
hgs
parents:
diff changeset
  1299
				// Install file and get the filename without path
hgs
parents:
diff changeset
  1300
				HBufC* strippedName = iStorageManager->InstallFileLC( *fileName );
hgs
parents:
diff changeset
  1301
				returnValue = BSElementFactory::CreateBSElementL( *elementId,
hgs
parents:
diff changeset
  1302
																   type,
hgs
parents:
diff changeset
  1303
																   *strippedName );
hgs
parents:
diff changeset
  1304
				CleanupStack::Pop( strippedName );
hgs
parents:
diff changeset
  1305
				CleanupStack::PopAndDestroy( fileName );
hgs
parents:
diff changeset
  1306
				}
hgs
parents:
diff changeset
  1307
			else
hgs
parents:
diff changeset
  1308
				{
hgs
parents:
diff changeset
  1309
				// we are appending, so this is really the filename
hgs
parents:
diff changeset
  1310
				returnValue = BSElementFactory::CreateBSElementL( *elementId,
hgs
parents:
diff changeset
  1311
																   type,
hgs
parents:
diff changeset
  1312
																   *fileName );
hgs
parents:
diff changeset
  1313
				CleanupStack::Pop( fileName );
hgs
parents:
diff changeset
  1314
				}
hgs
parents:
diff changeset
  1315
			break;
hgs
parents:
diff changeset
  1316
			}
hgs
parents:
diff changeset
  1317
			
hgs
parents:
diff changeset
  1318
		case EBSList:
hgs
parents:
diff changeset
  1319
			{
hgs
parents:
diff changeset
  1320
			RBSObjOwningPtrArray<MBSElement> listData;
hgs
parents:
diff changeset
  1321
			CleanupClosePushL( listData );
hgs
parents:
diff changeset
  1322
			TInt listCount = aStream.ReadInt16L();
hgs
parents:
diff changeset
  1323
			for( TInt i = 0; i < listCount; i++ )
hgs
parents:
diff changeset
  1324
				{
hgs
parents:
diff changeset
  1325
				MBSElement* listElement = InternalizeElementL( aStream );
hgs
parents:
diff changeset
  1326
				CleanupDeletePushL( listElement );
hgs
parents:
diff changeset
  1327
				listData.AppendL( listElement );
hgs
parents:
diff changeset
  1328
				CleanupStack::Pop(); // listElement
hgs
parents:
diff changeset
  1329
				}
hgs
parents:
diff changeset
  1330
hgs
parents:
diff changeset
  1331
			returnValue = BSElementFactory::CreateBSElementL( *elementId,
hgs
parents:
diff changeset
  1332
															   EBSList,
hgs
parents:
diff changeset
  1333
															   listData );
hgs
parents:
diff changeset
  1334
			CleanupStack::Pop(); //  listData
hgs
parents:
diff changeset
  1335
			break;
hgs
parents:
diff changeset
  1336
			}
hgs
parents:
diff changeset
  1337
		case EBSBuffer:
hgs
parents:
diff changeset
  1338
			{
hgs
parents:
diff changeset
  1339
			TInt bufferSize = aStream.ReadInt16L();
hgs
parents:
diff changeset
  1340
			HBufC8* buffer = HBufC8::NewLC( bufferSize );
hgs
parents:
diff changeset
  1341
hgs
parents:
diff changeset
  1342
			TPtr8 buffPtr = buffer->Des();
hgs
parents:
diff changeset
  1343
			aStream.ReadL( buffPtr, bufferSize );
hgs
parents:
diff changeset
  1344
hgs
parents:
diff changeset
  1345
			returnValue = BSElementFactory::CreateBSElementL( *elementId,
hgs
parents:
diff changeset
  1346
															   EBSBuffer,
hgs
parents:
diff changeset
  1347
															   *buffer );
hgs
parents:
diff changeset
  1348
hgs
parents:
diff changeset
  1349
			CleanupStack::Pop( buffer );
hgs
parents:
diff changeset
  1350
			break;
hgs
parents:
diff changeset
  1351
			}
hgs
parents:
diff changeset
  1352
		case EBSBitmap:
hgs
parents:
diff changeset
  1353
			{
hgs
parents:
diff changeset
  1354
			TInt length = aStream.ReadInt16L();
hgs
parents:
diff changeset
  1355
			HBufC8* fileId = HBufC8::NewLC( length );
hgs
parents:
diff changeset
  1356
			
hgs
parents:
diff changeset
  1357
			TPtr8 fileIdPtr = fileId->Des();
hgs
parents:
diff changeset
  1358
			aStream.ReadL( fileIdPtr, length );
hgs
parents:
diff changeset
  1359
			
hgs
parents:
diff changeset
  1360
			TInt bitmapId = aStream.ReadInt16L();
hgs
parents:
diff changeset
  1361
			TInt maskId = aStream.ReadInt16L();
hgs
parents:
diff changeset
  1362
			TInt skinId = aStream.ReadInt16L();
hgs
parents:
diff changeset
  1363
			TInt skinMaskId = aStream.ReadInt16L();
hgs
parents:
diff changeset
  1364
hgs
parents:
diff changeset
  1365
hgs
parents:
diff changeset
  1366
			CBSBitmap* bitmap = CBSBitmap::NewLC( bitmapId,
hgs
parents:
diff changeset
  1367
												  maskId,
hgs
parents:
diff changeset
  1368
												  skinId,
hgs
parents:
diff changeset
  1369
												  skinMaskId,
hgs
parents:
diff changeset
  1370
												  fileIdPtr );
hgs
parents:
diff changeset
  1371
													  
hgs
parents:
diff changeset
  1372
			returnValue = BSElementFactory::CreateBSElementL( *elementId, 
hgs
parents:
diff changeset
  1373
															  EBSBitmap,
hgs
parents:
diff changeset
  1374
															  bitmap );
hgs
parents:
diff changeset
  1375
			CleanupStack::Pop( bitmap ); 
hgs
parents:
diff changeset
  1376
			CleanupStack::PopAndDestroy( fileId );
hgs
parents:
diff changeset
  1377
			break;
hgs
parents:
diff changeset
  1378
			}
hgs
parents:
diff changeset
  1379
hgs
parents:
diff changeset
  1380
		default:
hgs
parents:
diff changeset
  1381
			{
hgs
parents:
diff changeset
  1382
			User::Leave( KErrArgument );
hgs
parents:
diff changeset
  1383
			break;
hgs
parents:
diff changeset
  1384
			}
hgs
parents:
diff changeset
  1385
		}
hgs
parents:
diff changeset
  1386
hgs
parents:
diff changeset
  1387
	CleanupStack::PopAndDestroy( elementId );
hgs
parents:
diff changeset
  1388
hgs
parents:
diff changeset
  1389
	return returnValue;
hgs
parents:
diff changeset
  1390
	}
hgs
parents:
diff changeset
  1391
hgs
parents:
diff changeset
  1392
hgs
parents:
diff changeset
  1393
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1394
// CBSSession::MatchSessionL
hgs
parents:
diff changeset
  1395
//
hgs
parents:
diff changeset
  1396
// (other items were commented in a header).
hgs
parents:
diff changeset
  1397
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1398
//
hgs
parents:
diff changeset
  1399
TBool CBSSession::MatchSessionL( const TDesC& aApplicationId,
hgs
parents:
diff changeset
  1400
								 const TDesC& aBrandId,
hgs
parents:
diff changeset
  1401
								 TLanguage aLanguageId,
hgs
parents:
diff changeset
  1402
							 	 TInt aReserved )
hgs
parents:
diff changeset
  1403
	{
hgs
parents:
diff changeset
  1404
	TBool returnValue = EFalse;
hgs
parents:
diff changeset
  1405
	if( iApplicationId && iBrandId )
hgs
parents:
diff changeset
  1406
		{
hgs
parents:
diff changeset
  1407
		if( ( 0 == iApplicationId->Compare( aApplicationId ) ) &&
hgs
parents:
diff changeset
  1408
		   ( 0 == iBrandId->Compare( aBrandId ) ) &&
hgs
parents:
diff changeset
  1409
		   ( iLanguageId == aLanguageId ) && 
hgs
parents:
diff changeset
  1410
		   ( iReserved == aReserved ))
hgs
parents:
diff changeset
  1411
			{
hgs
parents:
diff changeset
  1412
			returnValue = ETrue;
hgs
parents:
diff changeset
  1413
			}
hgs
parents:
diff changeset
  1414
		}
hgs
parents:
diff changeset
  1415
	
hgs
parents:
diff changeset
  1416
	return returnValue;
hgs
parents:
diff changeset
  1417
	}
hgs
parents:
diff changeset
  1418
hgs
parents:
diff changeset
  1419
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1420
// CBSSession::MatchSessionL
hgs
parents:
diff changeset
  1421
//
hgs
parents:
diff changeset
  1422
// (other items were commented in a header).
hgs
parents:
diff changeset
  1423
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1424
//
hgs
parents:
diff changeset
  1425
TBool CBSSession::MatchSessionUninstallL( const TDesC& aApplicationId,
hgs
parents:
diff changeset
  1426
								 const TDesC& aBrandId)
hgs
parents:
diff changeset
  1427
	{
hgs
parents:
diff changeset
  1428
	TBool returnValue = EFalse;
hgs
parents:
diff changeset
  1429
	if( iApplicationId && iBrandId )
hgs
parents:
diff changeset
  1430
		{
hgs
parents:
diff changeset
  1431
		if( ( 0 == iApplicationId->Compare( aApplicationId ) ) &&
hgs
parents:
diff changeset
  1432
		   ( 0 == iBrandId->Compare( aBrandId ) ) )
hgs
parents:
diff changeset
  1433
			{
hgs
parents:
diff changeset
  1434
			returnValue = ETrue;
hgs
parents:
diff changeset
  1435
			}
hgs
parents:
diff changeset
  1436
		}
hgs
parents:
diff changeset
  1437
	
hgs
parents:
diff changeset
  1438
	return returnValue;
hgs
parents:
diff changeset
  1439
	}
hgs
parents:
diff changeset
  1440
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1441
// CBSSession::BrandUpdatedL
hgs
parents:
diff changeset
  1442
//
hgs
parents:
diff changeset
  1443
// (other items were commented in a header).
hgs
parents:
diff changeset
  1444
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1445
//
hgs
parents:
diff changeset
  1446
void CBSSession::BrandUpdatedL( const TDesC& aApplicationId,
hgs
parents:
diff changeset
  1447
								 const TDesC& aBrandId,
hgs
parents:
diff changeset
  1448
								 TLanguage aLanguageId,
hgs
parents:
diff changeset
  1449
							 	 TInt /*aReserved*/ )
hgs
parents:
diff changeset
  1450
	{
hgs
parents:
diff changeset
  1451
	TRACE( T_LIT( "CBSSession::BrandUpdatedL begin aAppId[%S] aBrandId[%S]"), &aApplicationId, &aBrandId );
hgs
parents:
diff changeset
  1452
	iIsBackup = EFalse ; 
hgs
parents:
diff changeset
  1453
	if( iApplicationId && iBrandId )
hgs
parents:
diff changeset
  1454
		{
hgs
parents:
diff changeset
  1455
		if( ( 0 == iApplicationId->Compare( aApplicationId ) ) &&
hgs
parents:
diff changeset
  1456
		   ( 0 == iBrandId->Compare( aBrandId ) ) &&
hgs
parents:
diff changeset
  1457
		   ( iLanguageId == aLanguageId ) )
hgs
parents:
diff changeset
  1458
			{
hgs
parents:
diff changeset
  1459
			// this event is for us 
hgs
parents:
diff changeset
  1460
			// complete the observer request from client
hgs
parents:
diff changeset
  1461
			if( iObserverActive )
hgs
parents:
diff changeset
  1462
				{
hgs
parents:
diff changeset
  1463
				iObserverMessage.Complete( KErrNone );
hgs
parents:
diff changeset
  1464
				iObserverActive = EFalse;
hgs
parents:
diff changeset
  1465
				}
hgs
parents:
diff changeset
  1466
			}
hgs
parents:
diff changeset
  1467
		}
hgs
parents:
diff changeset
  1468
	TRACE( T_LIT( "CBSSession::BrandUpdatedL end") );
hgs
parents:
diff changeset
  1469
	}
hgs
parents:
diff changeset
  1470
hgs
parents:
diff changeset
  1471
hgs
parents:
diff changeset
  1472
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1473
// CBSSession::RemoveBrandL
hgs
parents:
diff changeset
  1474
//
hgs
parents:
diff changeset
  1475
// (other items were commented in a header).
hgs
parents:
diff changeset
  1476
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1477
//
hgs
parents:
diff changeset
  1478
void CBSSession::RemoveBrandL( const RMessage2& /*aMessage*/ )
hgs
parents:
diff changeset
  1479
	{
hgs
parents:
diff changeset
  1480
	TRACE( T_LIT( "CBSSession::RemoveBrandL begin") );
hgs
parents:
diff changeset
  1481
	if( !iInitialized || !iStorageManager )
hgs
parents:
diff changeset
  1482
		{
hgs
parents:
diff changeset
  1483
		User::Leave( KErrNotReady );
hgs
parents:
diff changeset
  1484
		}
hgs
parents:
diff changeset
  1485
hgs
parents:
diff changeset
  1486
	iStorageManager->RemoveBrandL( *iApplicationId, *iBrandId,
hgs
parents:
diff changeset
  1487
								   iLanguageId, iReserved );
hgs
parents:
diff changeset
  1488
	
hgs
parents:
diff changeset
  1489
	
hgs
parents:
diff changeset
  1490
	
hgs
parents:
diff changeset
  1491
	TRACE( T_LIT( "CBSSession::RemoveBrandL end") );
hgs
parents:
diff changeset
  1492
	}
hgs
parents:
diff changeset
  1493
hgs
parents:
diff changeset
  1494
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1495
// CBSSession::RemoveApplicationL
hgs
parents:
diff changeset
  1496
//
hgs
parents:
diff changeset
  1497
// (other items were commented in a header).
hgs
parents:
diff changeset
  1498
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1499
//
hgs
parents:
diff changeset
  1500
void CBSSession::RemoveApplicationL( const RMessage2& /*aMessage*/ )
hgs
parents:
diff changeset
  1501
	{
hgs
parents:
diff changeset
  1502
	TRACE( T_LIT( "CBSSession::RemoveApplicationL begin") );
hgs
parents:
diff changeset
  1503
	if( !iInitialized || !iStorageManager )
hgs
parents:
diff changeset
  1504
		{
hgs
parents:
diff changeset
  1505
		User::Leave( KErrNotReady );
hgs
parents:
diff changeset
  1506
		}
hgs
parents:
diff changeset
  1507
	iStorageManager->RemoveApplicationL( *iApplicationId );
hgs
parents:
diff changeset
  1508
	TRACE( T_LIT( "CBSSession::RemoveApplicationL end") );
hgs
parents:
diff changeset
  1509
	}
hgs
parents:
diff changeset
  1510
	
hgs
parents:
diff changeset
  1511
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1512
// CBSSession::GetNewVersionL
hgs
parents:
diff changeset
  1513
//
hgs
parents:
diff changeset
  1514
// (other items were commented in a header).
hgs
parents:
diff changeset
  1515
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1516
//	
hgs
parents:
diff changeset
  1517
TInt CBSSession::GetNewVersionL()
hgs
parents:
diff changeset
  1518
	{
hgs
parents:
diff changeset
  1519
	if( !iStorageManager )
hgs
parents:
diff changeset
  1520
		{
hgs
parents:
diff changeset
  1521
		iStorageManager = CBSStorageManager::NewL( this, KNullDesC );
hgs
parents:
diff changeset
  1522
		}
hgs
parents:
diff changeset
  1523
hgs
parents:
diff changeset
  1524
	return iStorageManager->GetNewestVersionL( *iApplicationId, *iBrandId, iLanguageId );
hgs
parents:
diff changeset
  1525
	}
hgs
parents:
diff changeset
  1526
	
hgs
parents:
diff changeset
  1527
hgs
parents:
diff changeset
  1528
// CBSSessionInfo
hgs
parents:
diff changeset
  1529
CBSSession::CBSSessionInfo* CBSSession::CBSSessionInfo::NewL( const TDesC& aFileName, 
hgs
parents:
diff changeset
  1530
	    		                                              const TDesC& aCaption,
hgs
parents:
diff changeset
  1531
	    		                                              TThreadId aThreadId, 
hgs
parents:
diff changeset
  1532
	    		                                              TProcessId aProcessId )
hgs
parents:
diff changeset
  1533
	{
hgs
parents:
diff changeset
  1534
	CBSSessionInfo* self = new( ELeave ) CBSSessionInfo( aThreadId, aProcessId );
hgs
parents:
diff changeset
  1535
	CleanupStack::PushL( self );
hgs
parents:
diff changeset
  1536
	self->ConstructL( aFileName, aCaption );
hgs
parents:
diff changeset
  1537
	CleanupStack::Pop( self );
hgs
parents:
diff changeset
  1538
	return self;
hgs
parents:
diff changeset
  1539
	}
hgs
parents:
diff changeset
  1540
void CBSSession::CBSSessionInfo::ConstructL( const TDesC& aFileName, const TDesC& aCaption )
hgs
parents:
diff changeset
  1541
	{	
hgs
parents:
diff changeset
  1542
	iFileName = aFileName.AllocL();
hgs
parents:
diff changeset
  1543
	iCaption = aCaption.AllocL();
hgs
parents:
diff changeset
  1544
	}
hgs
parents:
diff changeset
  1545
CBSSession::CBSSessionInfo::CBSSessionInfo( TThreadId aThreadId, TProcessId aProcessId  )
hgs
parents:
diff changeset
  1546
: iThreadId( aThreadId ),
hgs
parents:
diff changeset
  1547
  iProcessId( aProcessId )
hgs
parents:
diff changeset
  1548
	{
hgs
parents:
diff changeset
  1549
	}
hgs
parents:
diff changeset
  1550
CBSSession::CBSSessionInfo::~CBSSessionInfo()
hgs
parents:
diff changeset
  1551
	{
hgs
parents:
diff changeset
  1552
	delete iFileName;
hgs
parents:
diff changeset
  1553
	delete iCaption;
hgs
parents:
diff changeset
  1554
	}
hgs
parents:
diff changeset
  1555
hgs
parents:
diff changeset
  1556
const TDesC& CBSSession::CBSSessionInfo::FileName()
hgs
parents:
diff changeset
  1557
	{
hgs
parents:
diff changeset
  1558
	return *iFileName;
hgs
parents:
diff changeset
  1559
	}
hgs
parents:
diff changeset
  1560
const TDesC& CBSSession::CBSSessionInfo::Caption()
hgs
parents:
diff changeset
  1561
	{
hgs
parents:
diff changeset
  1562
	return *iCaption;
hgs
parents:
diff changeset
  1563
	}
hgs
parents:
diff changeset
  1564
hgs
parents:
diff changeset
  1565
TThreadId CBSSession::CBSSessionInfo::ThreadId()
hgs
parents:
diff changeset
  1566
	{
hgs
parents:
diff changeset
  1567
	return iThreadId;
hgs
parents:
diff changeset
  1568
	}
hgs
parents:
diff changeset
  1569
TProcessId CBSSession::CBSSessionInfo::ProcessId()
hgs
parents:
diff changeset
  1570
	{
hgs
parents:
diff changeset
  1571
	return iProcessId;
hgs
parents:
diff changeset
  1572
	}
hgs
parents:
diff changeset
  1573
hgs
parents:
diff changeset
  1574
hgs
parents:
diff changeset
  1575
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1576
// CBSSession::ExtractInfoL
hgs
parents:
diff changeset
  1577
// Extracts some information from the specified RMessage2 and saves it.
hgs
parents:
diff changeset
  1578
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1579
//
hgs
parents:
diff changeset
  1580
void CBSSession::ExtractInfoL( const RMessage2& aMessage )
hgs
parents:
diff changeset
  1581
    {
hgs
parents:
diff changeset
  1582
	TRACE( T_LIT( "CBSSession::ExtractInfoL begin") );
hgs
parents:
diff changeset
  1583
	//Collect all necessary data
hgs
parents:
diff changeset
  1584
	RThread thread;
hgs
parents:
diff changeset
  1585
	TInt getProcessErr,getClientThreadErr;
hgs
parents:
diff changeset
  1586
	getClientThreadErr = aMessage.Client( thread );
hgs
parents:
diff changeset
  1587
	CleanupClosePushL( thread );
hgs
parents:
diff changeset
  1588
    
hgs
parents:
diff changeset
  1589
	if ( KErrNone == getClientThreadErr )
hgs
parents:
diff changeset
  1590
	    {
hgs
parents:
diff changeset
  1591
	    TRACE( T_LIT( "CBSSession::ExtractInfoL Client retrieved OK") );
hgs
parents:
diff changeset
  1592
	    TThreadId threadId = thread.Id();
hgs
parents:
diff changeset
  1593
	    RProcess process;
hgs
parents:
diff changeset
  1594
	    getProcessErr = thread.Process( process );
hgs
parents:
diff changeset
  1595
	    CleanupClosePushL( process );
hgs
parents:
diff changeset
  1596
	    if ( getProcessErr == KErrNone )
hgs
parents:
diff changeset
  1597
	        {
hgs
parents:
diff changeset
  1598
	        TRACE( T_LIT( "CBSSession::ExtractInfoL Processfilename retrieved OK") );
hgs
parents:
diff changeset
  1599
	        TFileName fileName = process.FileName();	        
hgs
parents:
diff changeset
  1600
	        TParsePtrC parser( fileName );	        
hgs
parents:
diff changeset
  1601
	        TPtrC processFileNameAndExt( parser.NameAndExt() );
hgs
parents:
diff changeset
  1602
	        
hgs
parents:
diff changeset
  1603
	        RApaLsSession session;
hgs
parents:
diff changeset
  1604
	        TInt connectErr = session.Connect();
hgs
parents:
diff changeset
  1605
	        User :: LeaveIfError (connectErr);
hgs
parents:
diff changeset
  1606
	        session.GetAllApps();	        
hgs
parents:
diff changeset
  1607
	        CleanupClosePushL( session );
hgs
parents:
diff changeset
  1608
	        
hgs
parents:
diff changeset
  1609
	        TApaAppInfo info;	        
hgs
parents:
diff changeset
  1610
	        TPtrC captionPtr( KNullDesC );
hgs
parents:
diff changeset
  1611
	        TPtrC printCaptionPtr( KNullDesC );
hgs
parents:
diff changeset
  1612
	        TPtrC fullName( KNullDesC );
hgs
parents:
diff changeset
  1613
	        while ( KErrNone == session.GetNextApp( info ) )
hgs
parents:
diff changeset
  1614
	            {
hgs
parents:
diff changeset
  1615
	            fullName.Set( info.iFullName );
hgs
parents:
diff changeset
  1616
	            printCaptionPtr.Set( info.iCaption );	            
hgs
parents:
diff changeset
  1617
	            if( KErrNotFound != fullName.Find( processFileNameAndExt ) )
hgs
parents:
diff changeset
  1618
	                {	                
hgs
parents:
diff changeset
  1619
	                captionPtr.Set( info.iCaption );
hgs
parents:
diff changeset
  1620
	                TRACE( T_LIT( "CBSSession::ExtractInfoL caption saved: %S"),&captionPtr );
hgs
parents:
diff changeset
  1621
	                break;
hgs
parents:
diff changeset
  1622
	                }	            
hgs
parents:
diff changeset
  1623
	            }	        
hgs
parents:
diff changeset
  1624
	        
hgs
parents:
diff changeset
  1625
	        CBSSessionInfo* temp = 
hgs
parents:
diff changeset
  1626
	            CBSSessionInfo::NewL( processFileNameAndExt,
hgs
parents:
diff changeset
  1627
	                                  captionPtr,
hgs
parents:
diff changeset
  1628
	                                  threadId, 
hgs
parents:
diff changeset
  1629
	                                  process.Id() );
hgs
parents:
diff changeset
  1630
	        TRACE( T_LIT( "CBSSession::ExtractInfoL SessionInfo object creation OK") );
hgs
parents:
diff changeset
  1631
	        delete iSessionInfo;
hgs
parents:
diff changeset
  1632
	        iSessionInfo = NULL;
hgs
parents:
diff changeset
  1633
	        iSessionInfo = temp;	        
hgs
parents:
diff changeset
  1634
	        CleanupStack::PopAndDestroy( &session );
hgs
parents:
diff changeset
  1635
	        }
hgs
parents:
diff changeset
  1636
	    CleanupStack::PopAndDestroy( &process );
hgs
parents:
diff changeset
  1637
	    }    
hgs
parents:
diff changeset
  1638
    CleanupStack::PopAndDestroy( &thread );    
hgs
parents:
diff changeset
  1639
    TRACE( T_LIT( "CBSSession::ExtractInfoL end") );
hgs
parents:
diff changeset
  1640
    }
hgs
parents:
diff changeset
  1641
hgs
parents:
diff changeset
  1642
hgs
parents:
diff changeset
  1643
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1644
// CBSSession::FileName
hgs
parents:
diff changeset
  1645
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1646
//
hgs
parents:
diff changeset
  1647
const TDesC& CBSSession::FileName()
hgs
parents:
diff changeset
  1648
	{
hgs
parents:
diff changeset
  1649
	TRACE( T_LIT( "CBSSession::FileName begin") );
hgs
parents:
diff changeset
  1650
	if ( iSessionInfo )
hgs
parents:
diff changeset
  1651
	    {
hgs
parents:
diff changeset
  1652
	    TRACE( T_LIT( "CBSSession::FileName SessionInfo exists") );
hgs
parents:
diff changeset
  1653
	    return iSessionInfo->FileName();
hgs
parents:
diff changeset
  1654
	    }
hgs
parents:
diff changeset
  1655
	else
hgs
parents:
diff changeset
  1656
	    {
hgs
parents:
diff changeset
  1657
	    TRACE( T_LIT( "CBSSession::FileName SessionInfo does not exist") );
hgs
parents:
diff changeset
  1658
	    return KNullDesC;
hgs
parents:
diff changeset
  1659
	    }
hgs
parents:
diff changeset
  1660
	}
hgs
parents:
diff changeset
  1661
hgs
parents:
diff changeset
  1662
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1663
// CBSSession::Caption
hgs
parents:
diff changeset
  1664
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1665
//	
hgs
parents:
diff changeset
  1666
const TDesC& CBSSession::Caption()
hgs
parents:
diff changeset
  1667
	{
hgs
parents:
diff changeset
  1668
	TRACE( T_LIT( "CBSSession::Caption begin") );
hgs
parents:
diff changeset
  1669
	if ( iSessionInfo )
hgs
parents:
diff changeset
  1670
	    {
hgs
parents:
diff changeset
  1671
	    TRACE( T_LIT( "CBSSession::Caption SessionInfo exists") );
hgs
parents:
diff changeset
  1672
	    return iSessionInfo->Caption();
hgs
parents:
diff changeset
  1673
	    }
hgs
parents:
diff changeset
  1674
	else
hgs
parents:
diff changeset
  1675
	    {
hgs
parents:
diff changeset
  1676
	    TRACE( T_LIT( "CBSSession::Caption SessionInfo does not exist") );
hgs
parents:
diff changeset
  1677
	    return KNullDesC;
hgs
parents:
diff changeset
  1678
	    }
hgs
parents:
diff changeset
  1679
	}	
hgs
parents:
diff changeset
  1680
hgs
parents:
diff changeset
  1681
hgs
parents:
diff changeset
  1682
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1683
// CBSSession::ThreadId
hgs
parents:
diff changeset
  1684
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1685
//		
hgs
parents:
diff changeset
  1686
TInt CBSSession::ThreadId( TThreadId& aThreadId )
hgs
parents:
diff changeset
  1687
	{
hgs
parents:
diff changeset
  1688
	TRACE( T_LIT( "CBSSession::ThreadId begin") );
hgs
parents:
diff changeset
  1689
	TInt err( KErrNotFound );
hgs
parents:
diff changeset
  1690
	if ( iSessionInfo )
hgs
parents:
diff changeset
  1691
	    {	    
hgs
parents:
diff changeset
  1692
	    TRACE( T_LIT( "CBSSession::ThreadId SessionInfo exists") );
hgs
parents:
diff changeset
  1693
	    aThreadId = iSessionInfo->ThreadId();
hgs
parents:
diff changeset
  1694
	    err = KErrNone;
hgs
parents:
diff changeset
  1695
	    }
hgs
parents:
diff changeset
  1696
	return err;
hgs
parents:
diff changeset
  1697
	}
hgs
parents:
diff changeset
  1698
hgs
parents:
diff changeset
  1699
hgs
parents:
diff changeset
  1700
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1701
// CBSSession::ProcessId
hgs
parents:
diff changeset
  1702
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1703
//	
hgs
parents:
diff changeset
  1704
TInt CBSSession::ProcessId( TProcessId& aProcessId )
hgs
parents:
diff changeset
  1705
	{
hgs
parents:
diff changeset
  1706
	TRACE( T_LIT( "CBSSession::ProcessId begin") );
hgs
parents:
diff changeset
  1707
	TInt err( KErrNotFound );
hgs
parents:
diff changeset
  1708
	if ( iSessionInfo )
hgs
parents:
diff changeset
  1709
	    {	    
hgs
parents:
diff changeset
  1710
	    TRACE( T_LIT( "CBSSession::ProcessId SessionInfo exists") );
hgs
parents:
diff changeset
  1711
	    aProcessId = iSessionInfo->ProcessId();
hgs
parents:
diff changeset
  1712
	    err = KErrNone;
hgs
parents:
diff changeset
  1713
	    }
hgs
parents:
diff changeset
  1714
	return err;
hgs
parents:
diff changeset
  1715
	}
hgs
parents:
diff changeset
  1716
hgs
parents:
diff changeset
  1717
hgs
parents:
diff changeset
  1718
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1719
// CBSSession::InfoAvailable
hgs
parents:
diff changeset
  1720
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1721
//	
hgs
parents:
diff changeset
  1722
TBool CBSSession::InfoAvailable()
hgs
parents:
diff changeset
  1723
    {
hgs
parents:
diff changeset
  1724
    return iSessionInfo ? ETrue : EFalse;
hgs
parents:
diff changeset
  1725
    }
hgs
parents:
diff changeset
  1726
hgs
parents:
diff changeset
  1727
// END OF FILE
hgs
parents:
diff changeset
  1728
hgs
parents:
diff changeset
  1729