diff -r 000000000000 -r 164170e6151a wim/WimServer/src/WimJavaProvisioning.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wim/WimServer/src/WimJavaProvisioning.cpp Tue Jan 26 15:20:08 2010 +0200 @@ -0,0 +1,484 @@ +/* +* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +// INCLUDE FILES +#include "WimJavaProvisioning.h" +#include "Wimi.h" // WIMI +#include "WimClsv.h" +#include "WimUtilityFuncs.h" +#include "WimResponse.h" // Callback response message +#include "WimTrace.h" + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CWimJavaProvisioning::CWimJavaProvisioning +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CWimJavaProvisioning::CWimJavaProvisioning() + { + _WIMTRACE(_L("WIM | WIMServer | CWimJavaProvisioning::CWimJavaProvisioning | Begin")); + } + +// ----------------------------------------------------------------------------- +// CWimJavaProvisioning::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CWimJavaProvisioning::ConstructL() + { + _WIMTRACE(_L("WIM | WIMServer | CWimJavaProvisioning::ConstructL | Begin")); + iWimUtilityFuncs = CWimUtilityFuncs::NewL(); + } + +// ----------------------------------------------------------------------------- +// CWimJavaProvisioning::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CWimJavaProvisioning* CWimJavaProvisioning::NewL() + { + _WIMTRACE(_L("WIM | WIMServer | CWimJavaProvisioning::NewL | Begin")); + CWimJavaProvisioning* self = new( ELeave ) CWimJavaProvisioning; + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// Destructor +CWimJavaProvisioning::~CWimJavaProvisioning() + { + _WIMTRACE(_L("WIM | WIMServer | CWimJavaProvisioning::~CWimJavaProvisioning | Begin")); + delete iWimUtilityFuncs; + free_WIMI_Ref_t( iWimRef ); + } + +// ----------------------------------------------------------------------------- +// CWimJavaProvisioning::ACIFFileSizeL +// Get Java Provisioning file size +// ----------------------------------------------------------------------------- +// +void CWimJavaProvisioning::ACIFFileSizeL( const RMessage2& aMessage ) + { + _WIMTRACE(_L("WIM | WIMServer | CWimJavaProvisioning::ACIFFileSizeL | Begin")); + + InitializePathsAndSizes(); + + TJavaProv javaProvisioning; + javaProvisioning.iSize = 0; + TPckgBuf javaFilePckg( javaProvisioning ); + + TInt ACIFfileSize = iACIFFileSize; + + + _WIMTRACE2(_L("WIM | WIMServer | CWimJavaProvisioning::ACIFFileSizeL | ACIFFileSize=%d"), ACIFfileSize); + + javaFilePckg().iSize = ( TInt )ACIFfileSize; + aMessage.WriteL( 0, javaFilePckg ); + + aMessage.Complete( KErrNone ); + } + + + +// ----------------------------------------------------------------------------- +// CWimJavaProvisioning::ACFFileSizeL +// Get ACF file size +// ----------------------------------------------------------------------------- +// +void CWimJavaProvisioning::ACFFileSizeL( const RMessage2& aMessage ) + { + _WIMTRACE(_L("WIM | WIMServer | CWimJavaProvisioning::ACFFileSizeL | Begin")); + + //InitializePathsAndSizes(); + + TJavaProv javaProvisioning; + javaProvisioning.iSize = 0; + TPckgBuf javaFilePckg( javaProvisioning ); + + aMessage.ReadL( 2, iPathACF ); + + InitializeSize(); //iACFFileSize is updated; + + + _WIMTRACE2(_L("WIM | WIMServer | CWimJavaProvisioning::ACFFileSizeL | iACFFileSize=%d"), iACFFileSize); + + javaFilePckg().iSize = ( TInt )iACFFileSize; + aMessage.WriteL( 0, javaFilePckg ); + + aMessage.Complete( KErrNone ); + } + +// ----------------------------------------------------------------------------- +// CWimJavaProvisioning::ACIFFileContentL +// Write content of ACIF file to client memory +// ----------------------------------------------------------------------------- +// +void CWimJavaProvisioning::ACIFFileContentL( const RMessage2& aMessage ) + { + _WIMTRACE(_L("WIM | WIMServer | CWimJavaProvisioning::ACIFFileContentL | Begin")); + + TUint16 callStatus = KErrNone; + WIMI_BinData_t pt_path; + //TPtrC8 ACIFpathPtr; + WIMI_BinData_t fileContent; + + // Do initialization + InitializePathsAndSizes(); + + if ( !iWimRef || ( iPathACIF.Length() == 0 ) ) + { + callStatus = WIMI_ERR_KeyNotFound; // Mapped to KErrNotFound + } + + _WIMTRACE2(_L("WIM | WIMServer | CWimJavaProvisioning::ACIFFileContentL | iACFFileSize=%d"), iACFFileSize); + + if ( callStatus == KErrNone ) + { + pt_path.ui_buf_length = ( TUint16 )iPathACIF.Length(); + pt_path.pb_buf = ( TUint8* )iPathACIF.Ptr(); + + + fileContent.pb_buf = NULL; + fileContent.ui_buf_length = 0; + + + //Get ACIF file + WIMI_STAT callStatus = WIMI_GetJAVAFile(iWimRef, + &pt_path, + &fileContent ); + } + + if ( callStatus == KErrNone ) + { + TJavaProv javaProvisioning; + javaProvisioning.iSize = fileContent.ui_buf_length; + javaProvisioning.iJavaData = NULL; //The value will be reset in Client side + TPckgBuf javaFilePckg( javaProvisioning ); + + TPtrC8 ACIFFileContentPtr( fileContent.pb_buf, fileContent.ui_buf_length ); + TInt err = aMessage.Write( 1, ACIFFileContentPtr ); + if( err ) + { + WSL_OS_Free( fileContent.pb_buf ); + User::Leave( err ); + } + aMessage.Complete( KErrNone ); + } + else + { + aMessage.Complete( CWimUtilityFuncs::MapWIMError( callStatus ) ); + } + + WSL_OS_Free( fileContent.pb_buf ); // Deallocate file content buffer + _WIMTRACE(_L("WIM | WIMServer | CWimJavaProvisioning::ACIFFileContentL | End")); + } + + +// ----------------------------------------------------------------------------- +// CWimJavaProvisioning::ACFFileContentL +// Write content of ACIF file to client memory +// ----------------------------------------------------------------------------- +// +void CWimJavaProvisioning::ACFFileContentL( const RMessage2& aMessage ) + { + _WIMTRACE(_L("WIM | WIMServer | CWimJavaProvisioning::ACFFileContentL | Begin")); + + TUint16 callStatus = KErrNone; + WIMI_BinData_t pt_path; + WIMI_BinData_t fileContent; + + aMessage.ReadL( 2, iPathACF ); + + if ( !iWimRef || ( iPathACF.Length() == 0 ) ) + { + callStatus = WIMI_ERR_KeyNotFound; // Mapped to KErrNotFound + } + + if ( callStatus == KErrNone ) + { + pt_path.ui_buf_length = ( TUint16 )iPathACF.Length(); + pt_path.pb_buf = ( TUint8* )iPathACF.Ptr(); + + fileContent.pb_buf = NULL; + fileContent.ui_buf_length = 0; + + //Get ACIF file + WIMI_STAT callStatus = WIMI_GetJAVAFile(iWimRef, + &pt_path, + &fileContent ); + } + + if ( callStatus == KErrNone ) + { + TJavaProv javaProvisioning; + javaProvisioning.iSize = fileContent.ui_buf_length; + javaProvisioning.iJavaData = NULL; //The value will be reset in Client side + TPckgBuf javaFilePckg( javaProvisioning ); + + TPtrC8 ACFFileContentPtr( fileContent.pb_buf, fileContent.ui_buf_length ); + TInt err = aMessage.Write( 1, ACFFileContentPtr ); + if( err ) + { + WSL_OS_Free( fileContent.pb_buf ); + User::Leave( err ); + } + aMessage.Complete( KErrNone ); + } + else + { + aMessage.Complete( CWimUtilityFuncs::MapWIMError( callStatus ) ); + } + + WSL_OS_Free( fileContent.pb_buf ); // Deallocate file content buffer + _WIMTRACE(_L("WIM | WIMServer | CWimJavaProvisioning::ACFFileContentL | End")); + } + + +// ----------------------------------------------------------------------------- +// CWimJavaProvisioning::LabelAndPath +// ----------------------------------------------------------------------------- +// +void CWimJavaProvisioning::LabelAndPath( const RMessage2& aMessage ) + { + _WIMTRACE(_L("WIM | WIMServer | CWimJavaProvisioning::LabelAndPath | Begin")); + + TUint16 callStatus = KErrNone; + + WIMI_BinData_t path; + WIMI_BinData_t label; + + if( iWimRef ) + { + free_WIMI_Ref_t( iWimRef ); + iWimRef = NULL; + } + iWimRef = WIMI_GetWIMRef( 0 ); + + if ( !iWimRef ) + { + callStatus = WIMI_ERR_KeyNotFound; // Mapped to KErrNotFound + } + + if ( callStatus == KErrNone ) + { + path.pb_buf = NULL; + label.pb_buf = NULL; + + path.ui_buf_length = 0; + label.ui_buf_length = 0; + + //Get Path and label + callStatus = WIMI_GetLabelAndPath(iWimRef, + &path, + &label ); + } + + if ( callStatus == KErrNone ) + { + TPtrC8 PathPtr( path.pb_buf, path.ui_buf_length ); + TPtrC8 LabelPtr( label.pb_buf, label.ui_buf_length ); + + TInt err = KErrNone; + err = aMessage.Write( 0, LabelPtr ); + if ( err != KErrNone ) + { + aMessage.Complete( err ); + return; + } + + err = aMessage.Write( 1, PathPtr ); + if ( err != KErrNone ) + { + aMessage.Complete( err ); + return; + } + + aMessage.Complete( KErrNone ); + } + else + { + aMessage.Complete( CWimUtilityFuncs::MapWIMError( callStatus ) ); + } + + _WIMTRACE(_L("WIM | WIMServer | CWimJavaProvisioning::OmaFileContentL | End")); + } + + +// ----------------------------------------------------------------------------- +// CWimJavaProvisioning::InitializePathsAndSizes +// Initializes the path and size data members +// ----------------------------------------------------------------------------- +// +void CWimJavaProvisioning::InitializePathsAndSizes() + { + _WIMTRACE(_L("WIM | WIMServer | CWimJavaProvisioning::InitializePathsAndSizesL | Begin")); + + // Do initialization only if initialization is not done + if ( !iFileInfosInitialized ) + { + TUint16 callStatus = KErrNone; + + TBuf8 ACIFOid; + + ACIFOid.Copy( KWimProvACIFFileOID, KWimProvACIFFileOidLength ); + + TBuf8 ACIFOidTaged; + + ACIFOidTaged.Copy( KWimProvACIFFileOIDTaged, + KWimProvACIFFileOidLengthTaged ); + + WIMI_BinData_t path; + path.pb_buf = NULL; + path.ui_buf_length = 0; + + WIMI_File_Info* fileInfos = NULL; + + TUint16 fileCount = 0; + + WIMI_BinData_t fileOid; + fileOid.pb_buf = NULL; + fileOid.ui_buf_length = 0; + + // Get WIM reference, reader is always 0 + if ( iWimRef ) + { + free_WIMI_Ref_t( iWimRef ); + iWimRef = NULL; + } + iWimRef = WIMI_GetWIMRef( 0 ); + + if ( !iWimRef ) + { + callStatus = WIMI_ERR_BadReference; + } + + if ( callStatus == KErrNone ) + { + + // Get Java file info from Wimlib + callStatus = WIMI_JAVAFileInfo( iWimRef, + &fileInfos, + &fileCount ); + } + + if ( callStatus == KErrNone ) + { + TBuf8 oidBuf; // Buffer for OID + + // Loop all file infos and safe path to each file + for ( TInt i = 0; i < fileCount; i++ ) + { + // Get file OID from infos + fileOid.pb_buf = fileInfos[i].t_oid.pb_buf; + fileOid.ui_buf_length = fileInfos[i].t_oid.ui_buf_length; + oidBuf.FillZ(); + oidBuf.Copy( fileOid.pb_buf, fileOid.ui_buf_length ); + + // File path + path.pb_buf = fileInfos[i].b_path.pb_buf; + path.ui_buf_length = fileInfos[i].b_path.ui_buf_length; + + // Compare OIDs + if ( !oidBuf.Compare( ACIFOid ) + || !oidBuf.Compare( ACIFOidTaged ) ) // ACIF File + { + // Copy file path to member + iPathACIF.Copy( path.pb_buf, path.ui_buf_length ); + + // Set file size + iACIFFileSize = fileInfos[i].ui_file_size; + + // Check if path is given but size not. If path exists and + // size == 0 then parse size from fetched file + if ( iPathACIF.Length() > 0 && + iACIFFileSize == 0 ) + { + WIMI_BinData_t pt_path; + + WIMI_BinData_t fileContent; + + pt_path.ui_buf_length = ( TUint16 )iPathACIF.Length(); + pt_path.pb_buf = ( TUint8* )iPathACIF.Ptr(); + + fileContent.pb_buf = NULL; + fileContent.ui_buf_length = 0; + + //Get ACIF file + WIMI_STAT callStatus = WIMI_GetJAVAFile(iWimRef, + &pt_path, + &fileContent ); + iACIFFileSize = fileContent.ui_buf_length; + } + } + + } + } + iFileInfosInitialized = ETrue; + } + } + +// ----------------------------------------------------------------------------- +// CWimJavaProvisioning::InitializeSizes +// Initializes the path and size data members +// ----------------------------------------------------------------------------- +// +void CWimJavaProvisioning::InitializeSize() + { + _WIMTRACE(_L("WIM | WIMServer | CWimJavaProvisioning::InitializeSizesL | Begin")); + + // Do initialization only if initialization is not done + + if ( iPathACF.Length() > 0 ) + { + WIMI_BinData_t pt_path; + + WIMI_BinData_t fileContent; + + // Get WIM reference, reader is always 0 + if ( iWimRef ) + { + free_WIMI_Ref_t( iWimRef ); + iWimRef = NULL; + } + iWimRef = WIMI_GetWIMRef( 0 ); + + pt_path.ui_buf_length = ( TUint16 )iPathACF.Length(); + pt_path.pb_buf = ( TUint8* )iPathACF.Ptr(); + + fileContent.pb_buf = NULL; + fileContent.ui_buf_length = 0; + + //Get ACIF file + WIMI_STAT callStatus = WIMI_GetJAVAFile(iWimRef, + &pt_path, + &fileContent ); + + iACFFileSize = fileContent.ui_buf_length; + } + else + { + iACFFileSize = 0; + } + + }