connectivitymodules/SeCon/services/pcd/src/sconsbeclient.cpp
branchRCL_3
changeset 18 453dfc402455
parent 0 d0791faffa3f
equal deleted inserted replaced
17:dbd1c5e08735 18:453dfc402455
     1 /*
     1 /*
     2 * Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
     2 * Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
     3 * All rights reserved.
     3 * All rights reserved.
     4 * This component and the accompanying materials are made available
     4 * This component and the accompanying materials are made available
     5 * under the terms of "Eclipse Public License v1.0"
     5 * under the terms of "Eclipse Public License v1.0"
     6 * which accompanies this distribution, and is available
     6 * which accompanies this distribution, and is available
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
    22 #include <mmf/common/mmfcontrollerpluginresolver.h>
    22 #include <mmf/common/mmfcontrollerpluginresolver.h>
    23 
    23 
    24 #include "sconsbeclient.h"
    24 #include "sconsbeclient.h"
    25 #include "debug.h"
    25 #include "debug.h"
    26 
    26 
    27 
    27 const TInt KDataBufExpandSize( 1024 );
       
    28 const TInt KMaxObjectSize( 1048576 - 1024 ); // Max chunk size is 1MB, but give some space for ConML wbxml
    28 _LIT( KSConNoDrive, "\x0" );
    29 _LIT( KSConNoDrive, "\x0" );
    29 _LIT( KSConDriveExists, "\x1" );
    30 _LIT( KSConDriveExists, "\x1" );
    30 // ============================= MEMBER FUNCTIONS ==============================
    31 // ============================= MEMBER FUNCTIONS ==============================
    31 
    32 
    32 // -----------------------------------------------------------------------------
    33 // -----------------------------------------------------------------------------
    44 // -----------------------------------------------------------------------------
    45 // -----------------------------------------------------------------------------
    45 // CSConSBEClient::CSConSBEClient( const TInt aMaxObjectSize )
    46 // CSConSBEClient::CSConSBEClient( const TInt aMaxObjectSize )
    46 // Constructor
    47 // Constructor
    47 // -----------------------------------------------------------------------------
    48 // -----------------------------------------------------------------------------
    48 //
    49 //
    49 CSConSBEClient::CSConSBEClient( const TInt aMaxObjectSize, RFs& aFs ) : 
    50 CSConSBEClient::CSConSBEClient( const TInt /*aMaxObjectSize*/, RFs& aFs ) : 
    50         CActive( EPriorityStandard ), iSBEClient(NULL), 
    51         CActive( EPriorityStandard ), iBURModeNormal( ETrue ), iFs( aFs )
    51         iProcessComplete(EFalse), iProcessIndex( 0 ), iDataPos( 0 ),
    52     {
    52         iDataLeft( EFalse ), iBURModeNormal( ETrue ),
    53     
    53         iRestoreMode( EFalse ), iFs( aFs )
       
    54     {
       
    55     iMaxObjectSize = aMaxObjectSize;
       
    56     }
    54     }
    57 
    55 
    58 // -----------------------------------------------------------------------------
    56 // -----------------------------------------------------------------------------
    59 // CSConSBEClient::~CSConSBEClient()
    57 // CSConSBEClient::~CSConSBEClient()
    60 // Initializes member data
    58 // Initializes member data
    87     if( iSBEClient )
    85     if( iSBEClient )
    88         {
    86         {
    89         delete iSBEClient;
    87         delete iSBEClient;
    90         iSBEClient = NULL;
    88         iSBEClient = NULL;
    91         }
    89         }
       
    90     
       
    91     delete iDataBuffer;
    92     TRACE_FUNC_EXIT;
    92     TRACE_FUNC_EXIT;
    93     }
    93     }
    94 
    94 
    95 // -----------------------------------------------------------------------------
    95 // -----------------------------------------------------------------------------
    96 // CSConSBEClient::SetBURMode( TRequestStatus& aStatus, CSConTask*& aTask )
    96 // CSConSBEClient::SetBURMode( TRequestStatus& aStatus, CSConTask*& aTask )
   261         {
   261         {
   262         case ESetBURMode :
   262         case ESetBURMode :
   263             LOGGER_WRITE( "CSConSBEClient::RunL() : ESetBURMode" );
   263             LOGGER_WRITE( "CSConSBEClient::RunL() : ESetBURMode" );
   264             TRAP( err, ProcessSetBURModeL() );
   264             TRAP( err, ProcessSetBURModeL() );
   265             LOGGER_WRITE_1( "CSConSBEClient::RunL() : ProcessSetBURModeL() : returned %d", err );
   265             LOGGER_WRITE_1( "CSConSBEClient::RunL() : ProcessSetBURModeL() : returned %d", err );
   266             HandleSBEErrorL( err );
       
   267             User::RequestComplete( iCallerStatus, err );
       
   268             break;
   266             break;
   269         case EListPublicFiles :
   267         case EListPublicFiles :
   270             LOGGER_WRITE( "CSConSBEClient::RunL() : EListPublicFiles" );
   268             LOGGER_WRITE( "CSConSBEClient::RunL() : EListPublicFiles" );
   271             TRAP( err, ProcessListPublicFilesL() );
   269             TRAP( err, ProcessListPublicFilesL() );
   272             LOGGER_WRITE_1( "CSConSBEClient::RunL() : ProcessListPublicFilesL() : returned %d", err );
   270             LOGGER_WRITE_1( "CSConSBEClient::RunL() : ProcessListPublicFilesL() : returned %d", err );
   273             HandleSBEErrorL( err );
       
   274             User::RequestComplete( iCallerStatus, err );
       
   275             break;
   271             break;
   276         case EListDataOwners :
   272         case EListDataOwners :
   277             LOGGER_WRITE( "CSConSBEClient::RunL() : EListDataOwners" ); 
   273             LOGGER_WRITE( "CSConSBEClient::RunL() : EListDataOwners" ); 
   278             TRAP( err, ProcessListDataOwnersL() );
   274             TRAP( err, ProcessListDataOwnersL() );
   279             LOGGER_WRITE_1( "CSConSBEClient::RunL() : ProcessListDataOwnersL() : returned %d", err );
   275             LOGGER_WRITE_1( "CSConSBEClient::RunL() : ProcessListDataOwnersL() : returned %d", err );
   280             HandleSBEErrorL( err );
       
   281             User::RequestComplete( iCallerStatus, err );
       
   282             break;
   276             break;
   283         case EGetDataSize :
   277         case EGetDataSize :
   284             LOGGER_WRITE( "CSConSBEClient::RunL() : EGetDataSize" );    
   278             LOGGER_WRITE( "CSConSBEClient::RunL() : EGetDataSize" );    
   285             TRAP( err, ProcessGetDataSizeL() );
   279             TRAP( err, ProcessGetDataSizeL() );
   286             LOGGER_WRITE_1( "CSConSBEClient::RunL() : ProcessGetDataSizeL() : returned %d", err );
   280             LOGGER_WRITE_1( "CSConSBEClient::RunL() : ProcessGetDataSizeL() : returned %d", err );
   287             HandleSBEErrorL( err );
       
   288             User::RequestComplete( iCallerStatus, err );
       
   289             break;
   281             break;
   290         case ERequestData :
   282         case ERequestData :
   291             LOGGER_WRITE( "CSConSBEClient::RunL() : ERequestData" );
   283             LOGGER_WRITE( "CSConSBEClient::RunL() : ERequestData" );
   292             TRAP( err, ret = ProcessRequestDataL() );
   284             TRAP( err, ret = ProcessRequestDataL() );
   293             LOGGER_WRITE_1( "CSConSBEClient::RunL() : ProcessRequestDataL() : returned %d", err );
   285             LOGGER_WRITE_1( "CSConSBEClient::RunL() : ProcessRequestDataL() : returned %d", err );
   294             HandleSBEErrorL( err );
       
   295             
       
   296             if( err == KErrNone )
       
   297                 {
       
   298                 err = ret;
       
   299                 }
       
   300             
       
   301             User::RequestComplete( iCallerStatus, err );
       
   302             break;  
   286             break;  
   303         case EGetDataOwnerStatus :
   287         case EGetDataOwnerStatus :
   304             LOGGER_WRITE( "CSConSBEClient::RunL() : EGetDataOwnerStatus" );
   288             LOGGER_WRITE( "CSConSBEClient::RunL() : EGetDataOwnerStatus" );
   305             TRAP( err, ProcessGetDataOwnerStatusL() );
   289             TRAP( err, ProcessGetDataOwnerStatusL() );
   306             LOGGER_WRITE_1( "CSConSBEClient::RunL() : ProcessGetDataOwnerStatusL() : returned %d", err );
   290             LOGGER_WRITE_1( "CSConSBEClient::RunL() : ProcessGetDataOwnerStatusL() : returned %d", err );
   307             HandleSBEErrorL( err );
       
   308             User::RequestComplete( iCallerStatus, err );
       
   309             break;
   291             break;
   310         case ESupplyData :
   292         case ESupplyData :
   311             LOGGER_WRITE( "CSConSBEClient::RunL() : ESupplyData" ); 
   293             LOGGER_WRITE( "CSConSBEClient::RunL() : ESupplyData" ); 
   312             TRAP( err, ret = ProcessSupplyDataL() );
   294             TRAP( err, ret = ProcessSupplyDataL() );
   313             LOGGER_WRITE_1( "CSConSBEClient::RunL() : SupplyDataL() : returned %d", err );
   295             LOGGER_WRITE_1( "CSConSBEClient::RunL() : SupplyDataL() : returned %d", err );
   314             HandleSBEErrorL( err );
       
   315             
       
   316             if( err == KErrNone )
       
   317                 {
       
   318                 err = ret;
       
   319                 }
       
   320             
       
   321             User::RequestComplete( iCallerStatus, err );
       
   322             break;
   296             break;
   323         default :
   297         default :
       
   298             err = KErrNotSupported;
   324             LOGGER_WRITE( "CSConSBEClient::RunL() : ERROR! Unknown!" ); 
   299             LOGGER_WRITE( "CSConSBEClient::RunL() : ERROR! Unknown!" ); 
   325             break;
   300             break;
   326         }
   301         }
       
   302     
       
   303     if ( err )
       
   304         {
       
   305         HandleSBEErrorL( err );
       
   306         }
       
   307     else
       
   308         {
       
   309         err = ret;
       
   310         }
       
   311     User::RequestComplete( iCallerStatus, err );
   327             
   312             
   328     TRACE_FUNC_EXIT;
   313     TRACE_FUNC_EXIT;
   329     }
   314     }
   330     
   315     
   331 // -----------------------------------------------------------------------------
   316 // -----------------------------------------------------------------------------
   336 void CSConSBEClient::ProcessSetBURModeL()
   321 void CSConSBEClient::ProcessSetBURModeL()
   337     {
   322     {
   338     TRACE_FUNC_ENTRY;
   323     TRACE_FUNC_ENTRY;
   339     
   324     
   340     iAllSnapshotsSuppliedCalled = EFalse;
   325     iAllSnapshotsSuppliedCalled = EFalse;
       
   326     iLastChunk = EFalse;
   341     
   327     
   342     TDriveList driveList = iCurrentTask->iBURModeParams->iDriveList;
   328     TDriveList driveList = iCurrentTask->iBURModeParams->iDriveList;
   343     
   329     
   344     TBURPartType partialType = EBURUnset;
   330     TBURPartType partialType = EBURUnset;
   345     iRestoreMode = EFalse;
   331     iRestoreMode = EFalse;
   364             iRestoreMode = ETrue;
   350             iRestoreMode = ETrue;
   365             break;
   351             break;
   366         default :
   352         default :
   367             partialType = EBURUnset;
   353             partialType = EBURUnset;
   368             break;
   354             break;
       
   355         }
       
   356     
       
   357     if ( partialType == EBURBackupFull || partialType == ESConBurBackupPartial )
       
   358         {
       
   359         // initialize buffer
       
   360         if ( !iDataBuffer )
       
   361             iDataBuffer = CBufFlat::NewL( KDataBufExpandSize );
       
   362         else
       
   363             iDataBuffer->Reset();
       
   364         iDataBufferSize=0;
       
   365         }
       
   366     else
       
   367         {
       
   368         delete iDataBuffer;
       
   369         iDataBuffer = 0;
   369         }
   370         }
   370     
   371     
   371     TBackupIncType incType = ENoBackup;
   372     TBackupIncType incType = ENoBackup;
   372     
   373     
   373     switch( iCurrentTask->iBURModeParams->iIncType )    
   374     switch( iCurrentTask->iBURModeParams->iIncType )    
   519     
   520     
   520     for( TInt i = 0; i < dataOwners.Count(); i++ )
   521     for( TInt i = 0; i < dataOwners.Count(); i++ )
   521         {
   522         {
   522         LOGGER_WRITE_2("handling do: %d, count: %d", i, dataOwners.Count());
   523         LOGGER_WRITE_2("handling do: %d, count: %d", i, dataOwners.Count());
   523         CSConDataOwner* dataOwner = new (ELeave) CSConDataOwner();
   524         CSConDataOwner* dataOwner = new (ELeave) CSConDataOwner();
       
   525         CleanupStack::PushL( dataOwner );
   524         // default values
   526         // default values
   525         TSecureId sid( 0 );
   527         TSecureId sid( 0 );
   526         includeToList = ETrue;
   528         includeToList = ETrue;
   527         
   529         
   528         TCommonBURSettings commonOptions = dataOwners[i]->CommonSettings();
   530         TCommonBURSettings commonOptions = dataOwners[i]->CommonSettings();
   702             }
   704             }
   703         
   705         
   704         if( includeToList ) 
   706         if( includeToList ) 
   705             {
   707             {
   706             LOGGER_WRITE_1( "Appending to list, uid: 0x%08x", dataOwner->iUid.iUid );
   708             LOGGER_WRITE_1( "Appending to list, uid: 0x%08x", dataOwner->iUid.iUid );
   707             iCurrentTask->iListDataOwnersParams->iDataOwners.Append( dataOwner );
   709             iCurrentTask->iListDataOwnersParams->iDataOwners.AppendL( dataOwner );
       
   710             CleanupStack::Pop( dataOwner );
   708             }
   711             }
   709         
   712         
   710         if( sid )
   713         if( sid )
   711             {
   714             {
   712             LOGGER_WRITE_1( "Appending package sid to list, sid: 0x%08x", sid.iId );
   715             LOGGER_WRITE_1( "Appending package sid to list, sid: 0x%08x", sid.iId );
   713             CSConDataOwner* packageDataOwner = dataOwner->CopyL();
   716             CSConDataOwner* packageDataOwner = dataOwner->CopyL();
       
   717             CleanupStack::PushL( packageDataOwner );
   714             //Clear package name
   718             //Clear package name
   715             packageDataOwner->iPackageName = KNullDesC();
   719             packageDataOwner->iPackageName = KNullDesC();
   716             //Add sid
   720             //Add sid
   717             packageDataOwner->iUid.iUid = sid.iId;
   721             packageDataOwner->iUid.iUid = sid.iId;
   718             iCurrentTask->iListDataOwnersParams->iDataOwners.Append( packageDataOwner );
   722             iCurrentTask->iListDataOwnersParams->iDataOwners.AppendL( packageDataOwner );
       
   723             CleanupStack::Pop( packageDataOwner );
   719             }
   724             }
   720         
   725         
   721         if( !includeToList )
   726         if( !includeToList )
   722             {
   727             {
   723             //Not included to list => delete memory allocation
   728             //Not included to list => delete memory allocation
   724             delete dataOwner;
   729             CleanupStack::PopAndDestroy( dataOwner );
   725             }
   730             }
   726         }
   731         }
   727         
   732         
   728     packageArray.Reset();
   733     packageArray.Reset();
   729     CleanupStack::PopAndDestroy( &packageArray );
   734     CleanupStack::PopAndDestroy( &packageArray );
   836 //      
   841 //      
   837 TInt CSConSBEClient::ProcessRequestDataL()
   842 TInt CSConSBEClient::ProcessRequestDataL()
   838     {
   843     {
   839     TRACE_FUNC_ENTRY;
   844     TRACE_FUNC_ENTRY;
   840     TInt ret( KErrNone );
   845     TInt ret( KErrNone );
   841     
       
   842     if( iMaxObjectSize <= 1 )
       
   843         {
       
   844         User::Leave( KErrGeneral );
       
   845         }
       
   846         
   846         
   847     TBool packageData = EFalse;
   847     TBool packageData = EFalse;
   848     TTransferDataType transferDataType( ERegistrationData );
   848     TTransferDataType transferDataType( ERegistrationData );
   849     TPackageDataType packageDataType( ESystemSnapshotData );    
   849     TPackageDataType packageDataType( ESystemSnapshotData );    
   850     LOGGER_WRITE_1("CSConSBEClient::ProcessRequestDataL() iTransDataType: %d",
   850     LOGGER_WRITE_1("CSConSBEClient::ProcessRequestDataL() iTransDataType: %d",
   915     else if( !iCurrentTask->iRequestDataParams->iDataOwner->iJavaHash )
   915     else if( !iCurrentTask->iRequestDataParams->iDataOwner->iJavaHash )
   916         {
   916         {
   917         sid = iCurrentTask->iRequestDataParams->iDataOwner->iUid;
   917         sid = iCurrentTask->iRequestDataParams->iDataOwner->iUid;
   918         LOGGER_WRITE_1("CSConSBEClient::ProcessRequestDataL() sid: 0x%08x", sid.iId);
   918         LOGGER_WRITE_1("CSConSBEClient::ProcessRequestDataL() sid: 0x%08x", sid.iId);
   919         }
   919         }
   920             
   920     
   921     CSBPackageTransferType* ptt( NULL );
   921 
   922     CSBSIDTransferType* stt( NULL );
       
   923     CSBJavaTransferType* jtt( NULL );
       
   924     
       
   925     LOGGER_WRITE_1( "CSConSBEClient::ProcessRequestDataL() : \
       
   926     Begin - Data left: %d", iDataLeft );
       
   927     LOGGER_WRITE_1( "CSConSBEClient::ProcessRequestDataL() : \
   922     LOGGER_WRITE_1( "CSConSBEClient::ProcessRequestDataL() : \
   928     Begin - Package data: %d", packageData );
   923     Begin - Package data: %d", packageData );
   929     LOGGER_WRITE_1( "CSConSBEClient::ProcessRequestDataL() : \
   924 
   930     Begin - iDataPos: %d", iDataPos );
   925     LOGGER_WRITE_1("iLastChunk: %d", (TInt) iLastChunk );
   931         
   926     LOGGER_WRITE_1("iDataBufferSize: %d", iDataBufferSize );
   932     //Are there old data left to be transfered?
   927         
   933     if( !iDataLeft ) 
   928     // if was't last chunk and there are free space left on our packet
       
   929     if( !iLastChunk && iDataBufferSize < KMaxObjectSize ) 
   934         {
   930         {
   935         //No data left, request more from the server
   931         //No data left, request more from the server
   936         if( packageData && !iCurrentTask->iRequestDataParams->iDataOwner->iJavaHash )
   932         if( packageData && !iCurrentTask->iRequestDataParams->iDataOwner->iJavaHash )
   937             {
   933             {
   938             ptt = CSBPackageTransferType::NewL( uid, driveNumber, 
   934             CSBPackageTransferType* ptt = CSBPackageTransferType::NewL(
   939                 packageDataType );
   935                     uid, driveNumber, packageDataType );
   940             CleanupStack::PushL( ptt );
   936             CleanupStack::PushL( ptt );
   941             LOGGER_WRITE( "iSBEClient->RequestDataL( ptt ) : start" );
   937             
   942             TRequestStatus status;
   938             RequestDataL( *ptt );
   943             iSBEClient->RequestDataL( *ptt, status );
   939             
   944             User::WaitForRequest( status );
       
   945             LOGGER_WRITE( "iSBEClint->RequestDataL( ptt ) : stop" );
       
   946             
       
   947             LOGGER_WRITE_1( "CSConSBEClient::ProcessRequestDataL() : status.Int() %d", status.Int() );
       
   948             User::LeaveIfError( status.Int() );
       
   949                                     
       
   950             //Get the data and store the handle
       
   951             CSBGenericTransferType* gtt = NULL;
       
   952             LOGGER_WRITE( "iDataPtr.Set( iSBEClient->TransferDataInfoL( gtt, iSBEDataLeft ) : start" );
       
   953             iDataPtr.Set( iSBEClient->TransferDataInfoL( gtt, iLastChunk ) );
       
   954             LOGGER_WRITE( "iDataPtr.Set( iSBEClient->TransferDataInfoL( gtt, iSBEDataLeft ) : stop" );
       
   955             LOGGER_WRITE_1( "CSConSBEClient::ProcessRequestDataL() :\
       
   956              Received data size %d", iDataPtr.Length() );
       
   957             LOGGER_WRITE_1( "CSConSBEClient::ProcessRequestDataL() :\
       
   958              Received from DO 0x%08x", uid );
       
   959             LOGGER_WRITE_1( "CSConSBEClient::ProcessRequestDataL() :\
       
   960              Is last chunk %d", iLastChunk );
       
   961             LOGGER_WRITE_1( "CSConSBEClient::ProcessRequestDataL() :\
       
   962              Transfertype %d", iCurrentTask->iRequestDataParams->iDataOwner->iTransDataType );
       
   963              
       
   964              if( gtt )
       
   965                 {
       
   966                 delete gtt;
       
   967                 }
       
   968              
       
   969             CleanupStack::PopAndDestroy( ptt );
   940             CleanupStack::PopAndDestroy( ptt );
   970             }
   941             }
   971         else if( !iCurrentTask->iRequestDataParams->iDataOwner->iJavaHash )
   942         else if( !iCurrentTask->iRequestDataParams->iDataOwner->iJavaHash )
   972             {
   943             {
   973             stt = CSBSIDTransferType::NewL( sid, driveNumber, transferDataType );
   944             CSBSIDTransferType* stt = CSBSIDTransferType::NewL(
       
   945                     sid, driveNumber, transferDataType );
   974             CleanupStack::PushL( stt );
   946             CleanupStack::PushL( stt );
   975             LOGGER_WRITE( "iSBEClient->RequestDataL( stt ) : start" );
   947             
   976             TRequestStatus status;
   948             RequestDataL( *stt );
   977             iSBEClient->RequestDataL( *stt, status );
   949             
   978             User::WaitForRequest( status );
       
   979             LOGGER_WRITE( "iSBEClient->RequestDataL( stt ) : stop" );
       
   980             
       
   981             LOGGER_WRITE_1( "CSConSBEClient::ProcessRequestDataL() :\
       
   982              status.Int() %d", status.Int() );
       
   983             User::LeaveIfError( status.Int() );
       
   984                         
       
   985             //Get the data and store the handle
       
   986             CSBGenericTransferType* gtt = NULL;
       
   987             LOGGER_WRITE( "iDataPtr.Set( iSBEClient->TransferDataInfoL( gtt, iSBEDataLeft ) : start" );
       
   988             iDataPtr.Set( iSBEClient->TransferDataInfoL( gtt, iLastChunk ) );
       
   989             LOGGER_WRITE( "iDataPtr.Set( iSBEClient->TransferDataInfoL( gtt, iSBEDataLeft ) : stop" );
       
   990             LOGGER_WRITE_1( "CSConSBEClient::ProcessRequestDataL() :\
       
   991              Received data size %d", iDataPtr.Length() );
       
   992             LOGGER_WRITE_1( "CSConSBEClient::ProcessRequestDataL() :\
       
   993              Is last chunk %d", iLastChunk );
       
   994             LOGGER_WRITE_1( "CSConSBEClient::ProcessRequestDataL() :\
       
   995              Transfertype %d", 
       
   996              iCurrentTask->iRequestDataParams->iDataOwner->iTransDataType );
       
   997              
       
   998             if( gtt )
       
   999                 {
       
  1000                 delete gtt;
       
  1001                 }
       
  1002              
       
  1003             CleanupStack::PopAndDestroy( stt );
   950             CleanupStack::PopAndDestroy( stt );
  1004             }
   951             }
  1005         else
   952         else
  1006             {
   953             {
  1007             TPtr javaHashPtr = iCurrentTask->iRequestDataParams->iDataOwner->iJavaHash->Des();
   954             TPtr javaHashPtr = iCurrentTask->iRequestDataParams->iDataOwner->iJavaHash->Des();
  1008             
   955             CSBJavaTransferType* jtt( NULL );
  1009             //When ESystemData is requested, request EJavaMIDlet
   956             //When ESystemData is requested, request EJavaMIDlet
  1010             if( packageDataType == ESystemData )
   957             if( packageDataType == ESystemData )
  1011                 {
   958                 {
  1012                 jtt = CSBJavaTransferType::NewL( javaHashPtr, driveNumber, EJavaMIDlet );
   959                 jtt = CSBJavaTransferType::NewL( javaHashPtr, driveNumber, EJavaMIDlet );
  1013                 }
   960                 }
  1018                 }
   965                 }
  1019                         
   966                         
  1020             if( packageDataType == ESystemData || transferDataType == EPassiveBaseData )
   967             if( packageDataType == ESystemData || transferDataType == EPassiveBaseData )
  1021                 {
   968                 {
  1022                 CleanupStack::PushL( jtt );
   969                 CleanupStack::PushL( jtt );
  1023                 LOGGER_WRITE( "iSBEClient->RequestDataL( jtt ) : start" );
       
  1024                 TRequestStatus status;
       
  1025                 iSBEClient->RequestDataL( *jtt, status );
       
  1026                 User::WaitForRequest( status );
       
  1027                 LOGGER_WRITE( "iSBEClient->RequestDataL( jtt ) : stop" );
       
  1028                 
   970                 
  1029                 LOGGER_WRITE_1( "CSConSBEClient::ProcessRequestDataL() :\
   971                 RequestDataL( *jtt );
  1030                  status.Int() %d", status.Int() );
   972                 
  1031                 User::LeaveIfError( status.Int() );
       
  1032                             
       
  1033                 //Get the data and store the handle
       
  1034                 CSBGenericTransferType* gtt = NULL;
       
  1035                 LOGGER_WRITE( "iDataPtr.Set( iSBEClient->TransferDataInfoL( gtt, iSBEDataLeft ) : start" );
       
  1036                 iDataPtr.Set( iSBEClient->TransferDataInfoL( gtt, iLastChunk ) );
       
  1037                 LOGGER_WRITE( "iDataPtr.Set( iSBEClient->TransferDataInfoL( gtt, iSBEDataLeft ): stop" );
       
  1038                 LOGGER_WRITE_1( "CSConSBEClient::ProcessRequestDataL() :\
       
  1039                  Received data size %d", iDataPtr.Length() );
       
  1040                 LOGGER_WRITE_1( "CSConSBEClient::ProcessRequestDataL() :\
       
  1041                  Is last chunk %d", iLastChunk );
       
  1042                 LOGGER_WRITE_1( "CSConSBEClient::ProcessRequestDataL() :\
       
  1043                  Transfertype %d", 
       
  1044                  iCurrentTask->iRequestDataParams->iDataOwner->iTransDataType );
       
  1045                  
       
  1046                 if( gtt )
       
  1047                     {
       
  1048                     delete gtt;
       
  1049                     }
       
  1050                  
       
  1051                 CleanupStack::PopAndDestroy( jtt );   
   973                 CleanupStack::PopAndDestroy( jtt );   
  1052                 }
   974                 }
  1053             else
   975             else
  1054                 {
   976                 {
  1055                 //No data
   977                 //No data
  1056                 iDataPtr.Set( KNullDesC8 );
   978                 iDataBuffer->Reset();
       
   979                 iDataBufferSize = 0;
  1057                 iLastChunk = ETrue;
   980                 iLastChunk = ETrue;
  1058                 }
   981                 }
  1059             }
   982             }
  1060         }   
   983         }
  1061         
   984     
  1062     TInt dataBufLength = iDataPtr.Length();
   985     LOGGER_WRITE_1("readed iLastChunk: %d", (TInt) iLastChunk );
  1063     LOGGER_WRITE_1( "CSConSBEClient::ProcessRequestDataL() : \
   986     LOGGER_WRITE_1("readed iDataBufferSize: %d", iDataBufferSize );
  1064     Data received: %d", dataBufLength );
   987         
  1065     
   988     
  1066     TInt maxLength = iMaxObjectSize - 1024;
       
  1067     LOGGER_WRITE_1( "CSConSBEClient::ProcessRequestDataL() : \
       
  1068     Max length: %d", maxLength );
       
  1069     
   989     
  1070     if( iCurrentTask->iRequestDataParams->iBackupData )
   990     if( iCurrentTask->iRequestDataParams->iBackupData )
  1071         {
   991         {
  1072         delete iCurrentTask->iRequestDataParams->iBackupData;
   992         delete iCurrentTask->iRequestDataParams->iBackupData;
  1073         iCurrentTask->iRequestDataParams->iBackupData = NULL;
   993         iCurrentTask->iRequestDataParams->iBackupData = NULL;
  1074         }
   994         }
  1075     
   995     
       
   996     TInt dataToRead = KMaxObjectSize;
       
   997     if ( dataToRead > iDataBufferSize )
       
   998         dataToRead = iDataBufferSize;
       
   999     
  1076     //Initialize the task data buffer
  1000     //Initialize the task data buffer
  1077     iCurrentTask->iRequestDataParams->iBackupData = HBufC8::NewL( maxLength );
  1001     iCurrentTask->iRequestDataParams->iBackupData = HBufC8::NewL( dataToRead );
  1078     //Get descriptor task's buffer
  1002     //Get descriptor task's buffer
  1079     TPtr8 backupDataPtr = iCurrentTask->iRequestDataParams->iBackupData->Des();
  1003     TPtr8 backupDataPtr = iCurrentTask->iRequestDataParams->iBackupData->Des();
  1080     
  1004     
  1081     TInt copyPos = 0;
  1005     
  1082     
  1006     iDataBuffer->Read(0, backupDataPtr, dataToRead );
  1083     //Copy data to task buffer
  1007     iDataBuffer->Delete(0, dataToRead);
  1084     for( ; iDataPos < dataBufLength && copyPos < maxLength;
  1008     iDataBufferSize -= dataToRead;
  1085      iDataPos++ )
  1009     
  1086         {
  1010     if ( !iLastChunk || iDataBufferSize>0 )
  1087         backupDataPtr.Append( iDataPtr[iDataPos] );
  1011         {
  1088         copyPos++;
  1012         LOGGER_WRITE( "CSConSBEClient::ProcessRequestDataL() : There are more data available" );
  1089         }
       
  1090         
       
  1091     LOGGER_WRITE_1( "CSConSBEClient::ProcessRequestDataL() : \
       
  1092     End - copyPos: %d", copyPos );
       
  1093     LOGGER_WRITE_1( "CSConSBEClient::ProcessRequestDataL() : \
       
  1094     End - iDataPos: %d", iDataPos );
       
  1095             
       
  1096     //Are there more data left in the buffer
       
  1097     if( iDataPos < dataBufLength )
       
  1098         {
       
  1099         LOGGER_WRITE( "iSBEClient->RequestDataL( stt ) : There is more data in buffer" );
       
  1100         iDataLeft = ETrue;
       
  1101         iCurrentTask->iRequestDataParams->iMoreData = ETrue;
  1013         iCurrentTask->iRequestDataParams->iMoreData = ETrue;
  1102         //Another task is needed to transfer the data to the client
  1014         //Another task is needed to transfer the data to the client
  1103         ret = KErrCompletion;
  1015         ret = KErrCompletion;
  1104         }
  1016         }
  1105     else
  1017     else
  1106         {
  1018         {
  1107         //Check if the backup server has more data from the dataowner
  1019         LOGGER_WRITE( "CSConSBEClient::ProcessRequestDataL() : All data readed" );
  1108         if( !iLastChunk )
  1020         iDataBuffer->Reset();
  1109             {
  1021         iDataBufferSize = 0;
  1110             iCurrentTask->iRequestDataParams->iMoreData = ETrue; 
  1022         // task will be completed, initialize iLastChunk value for next operation
  1111             //Another task is needed to transfer the data to the client
  1023         iLastChunk = EFalse;
  1112             ret = KErrCompletion;
  1024         }
  1113             LOGGER_WRITE( "iSBEClient->RequestDataL( stt ) : There are more data available from SBE" );
  1025     
  1114             }
       
  1115         else
       
  1116             {
       
  1117             iCurrentTask->iRequestDataParams->iMoreData = EFalse;
       
  1118             }
       
  1119             
       
  1120         iDataPos = 0;   
       
  1121         iDataLeft = EFalse; 
       
  1122         }
       
  1123         
  1026         
  1124     LOGGER_WRITE_1( "CSConSBEClient::ProcessRequestDataL() :  returned %d", ret );
  1027     LOGGER_WRITE_1( "CSConSBEClient::ProcessRequestDataL() :  returned %d", ret );
  1125     return ret;
  1028     return ret;
       
  1029     }
       
  1030 
       
  1031 void CSConSBEClient::RequestDataL( CSBGenericTransferType& aGenericTransferType )
       
  1032     {
       
  1033     TRACE_FUNC_ENTRY;
       
  1034     if ( !iDataBuffer )
       
  1035         User::Leave( KErrArgument );
       
  1036     
       
  1037     do
       
  1038         {
       
  1039         LOGGER_WRITE( "iSBEClient->RequestDataL() : start" );
       
  1040         TRequestStatus status;
       
  1041         iSBEClient->RequestDataL( aGenericTransferType, status );
       
  1042         User::WaitForRequest( status );
       
  1043         LOGGER_WRITE_1( "iSBEClient->RequestDataL() : status.Int() %d", status.Int() );
       
  1044         User::LeaveIfError( status.Int() );
       
  1045                     
       
  1046         //Get the data and store the handle
       
  1047         CSBGenericTransferType* gtt = NULL;
       
  1048         const TPtrC8& dataPtr = iSBEClient->TransferDataInfoL( gtt, iLastChunk );
       
  1049         LOGGER_WRITE_1("data size: %d", dataPtr.Length());
       
  1050         delete gtt;
       
  1051         iDataBuffer->ExpandL( iDataBufferSize, dataPtr.Length() );
       
  1052         iDataBuffer->Write(iDataBufferSize, dataPtr);
       
  1053         iDataBufferSize += dataPtr.Length();
       
  1054         LOGGER_WRITE_1("total buffer size: %d", iDataBufferSize);
       
  1055         }
       
  1056     // Continue if there are more data, and our packet is not full
       
  1057     while ( !iLastChunk && iDataBufferSize < KMaxObjectSize );
       
  1058     
       
  1059     TRACE_FUNC_EXIT;
  1126     }
  1060     }
  1127     
  1061     
  1128 // -----------------------------------------------------------------------------
  1062 // -----------------------------------------------------------------------------
  1129 // CSConSBEClient::ProcessGetDataOwnerStatusL()
  1063 // CSConSBEClient::ProcessGetDataOwnerStatusL()
  1130 // Executes GetDataOwnerStatus task
  1064 // Executes GetDataOwnerStatus task
  1553         LOGGER_WRITE( "Re-connecting to SBE..." );
  1487         LOGGER_WRITE( "Re-connecting to SBE..." );
  1554         //Session has been terminated, recreate it..
  1488         //Session has been terminated, recreate it..
  1555         delete iSBEClient;
  1489         delete iSBEClient;
  1556         iSBEClient = NULL;
  1490         iSBEClient = NULL;
  1557         iSBEClient = CSBEClient::NewL();
  1491         iSBEClient = CSBEClient::NewL();
       
  1492         }
       
  1493     else if ( aErr ) // error
       
  1494         {
       
  1495         if ( iDataBuffer )
       
  1496             {
       
  1497             iDataBuffer->Reset();
       
  1498             iDataBufferSize = 0;
       
  1499             }
       
  1500         iLastChunk = EFalse;
  1558         }
  1501         }
  1559     TRACE_FUNC_EXIT;
  1502     TRACE_FUNC_EXIT;
  1560     }
  1503     }
  1561 
  1504 
  1562 // -----------------------------------------------------------------------------
  1505 // -----------------------------------------------------------------------------