wim/WimServer/src/WimJavaProvisioning.cpp
changeset 0 164170e6151a
equal deleted inserted replaced
-1:000000000000 0:164170e6151a
       
     1 /*
       
     2 * Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 // INCLUDE FILES
       
    20 #include    "WimJavaProvisioning.h"
       
    21 #include    "Wimi.h"                // WIMI
       
    22 #include    "WimClsv.h"
       
    23 #include    "WimUtilityFuncs.h"
       
    24 #include    "WimResponse.h"         // Callback response message
       
    25 #include    "WimTrace.h"
       
    26 
       
    27 
       
    28 // ============================ MEMBER FUNCTIONS ===============================
       
    29 
       
    30 // -----------------------------------------------------------------------------
       
    31 // CWimJavaProvisioning::CWimJavaProvisioning
       
    32 // C++ default constructor can NOT contain any code, that
       
    33 // might leave.
       
    34 // -----------------------------------------------------------------------------
       
    35 //
       
    36 CWimJavaProvisioning::CWimJavaProvisioning()
       
    37     {
       
    38     _WIMTRACE(_L("WIM | WIMServer | CWimJavaProvisioning::CWimJavaProvisioning | Begin"));
       
    39     }
       
    40 
       
    41 // -----------------------------------------------------------------------------
       
    42 // CWimJavaProvisioning::ConstructL
       
    43 // Symbian 2nd phase constructor can leave.
       
    44 // -----------------------------------------------------------------------------
       
    45 //
       
    46 void CWimJavaProvisioning::ConstructL()
       
    47     {
       
    48     _WIMTRACE(_L("WIM | WIMServer | CWimJavaProvisioning::ConstructL | Begin"));
       
    49     iWimUtilityFuncs = CWimUtilityFuncs::NewL();
       
    50     }
       
    51 
       
    52 // -----------------------------------------------------------------------------
       
    53 // CWimJavaProvisioning::NewL
       
    54 // Two-phased constructor.
       
    55 // -----------------------------------------------------------------------------
       
    56 //
       
    57 CWimJavaProvisioning* CWimJavaProvisioning::NewL()
       
    58     {
       
    59     _WIMTRACE(_L("WIM | WIMServer | CWimJavaProvisioning::NewL | Begin"));
       
    60     CWimJavaProvisioning* self = new( ELeave ) CWimJavaProvisioning;
       
    61     
       
    62     CleanupStack::PushL( self );
       
    63     self->ConstructL();
       
    64     CleanupStack::Pop( self );
       
    65     return self;
       
    66     }
       
    67   
       
    68 // Destructor
       
    69 CWimJavaProvisioning::~CWimJavaProvisioning()
       
    70     {
       
    71     _WIMTRACE(_L("WIM | WIMServer | CWimJavaProvisioning::~CWimJavaProvisioning | Begin"));
       
    72     delete iWimUtilityFuncs;
       
    73     free_WIMI_Ref_t( iWimRef );
       
    74     }
       
    75 
       
    76 // -----------------------------------------------------------------------------
       
    77 // CWimJavaProvisioning::ACIFFileSizeL
       
    78 // Get Java Provisioning file size
       
    79 // -----------------------------------------------------------------------------
       
    80 //
       
    81 void CWimJavaProvisioning::ACIFFileSizeL( const RMessage2& aMessage )
       
    82     {
       
    83     _WIMTRACE(_L("WIM | WIMServer | CWimJavaProvisioning::ACIFFileSizeL | Begin"));
       
    84 
       
    85     InitializePathsAndSizes();
       
    86 
       
    87     TJavaProv javaProvisioning;
       
    88     javaProvisioning.iSize = 0;
       
    89     TPckgBuf<TJavaProv> javaFilePckg( javaProvisioning );
       
    90 
       
    91     TInt ACIFfileSize = iACIFFileSize;
       
    92     
       
    93     
       
    94     _WIMTRACE2(_L("WIM | WIMServer | CWimJavaProvisioning::ACIFFileSizeL | ACIFFileSize=%d"), ACIFfileSize);
       
    95 
       
    96     javaFilePckg().iSize = ( TInt )ACIFfileSize;
       
    97     aMessage.WriteL( 0, javaFilePckg );
       
    98      
       
    99     aMessage.Complete( KErrNone );
       
   100     }
       
   101 
       
   102 
       
   103 
       
   104 // -----------------------------------------------------------------------------
       
   105 // CWimJavaProvisioning::ACFFileSizeL
       
   106 // Get ACF file size
       
   107 // -----------------------------------------------------------------------------
       
   108 //
       
   109 void CWimJavaProvisioning::ACFFileSizeL( const RMessage2& aMessage )
       
   110     {
       
   111     _WIMTRACE(_L("WIM | WIMServer | CWimJavaProvisioning::ACFFileSizeL | Begin"));
       
   112 
       
   113     //InitializePathsAndSizes();
       
   114 
       
   115     TJavaProv javaProvisioning;
       
   116     javaProvisioning.iSize = 0;
       
   117     TPckgBuf<TJavaProv> javaFilePckg( javaProvisioning );
       
   118 
       
   119     aMessage.ReadL( 2, iPathACF );
       
   120     
       
   121     InitializeSize(); //iACFFileSize is updated;
       
   122     
       
   123     
       
   124     _WIMTRACE2(_L("WIM | WIMServer | CWimJavaProvisioning::ACFFileSizeL | iACFFileSize=%d"), iACFFileSize);
       
   125 
       
   126     javaFilePckg().iSize = ( TInt )iACFFileSize;
       
   127     aMessage.WriteL( 0, javaFilePckg );
       
   128      
       
   129     aMessage.Complete( KErrNone );
       
   130     }
       
   131     
       
   132 // -----------------------------------------------------------------------------
       
   133 // CWimJavaProvisioning::ACIFFileContentL
       
   134 // Write content of ACIF file to client memory
       
   135 // -----------------------------------------------------------------------------
       
   136 //
       
   137 void CWimJavaProvisioning::ACIFFileContentL( const RMessage2& aMessage )
       
   138     {
       
   139     _WIMTRACE(_L("WIM | WIMServer | CWimJavaProvisioning::ACIFFileContentL | Begin"));
       
   140 
       
   141     TUint16 callStatus = KErrNone;
       
   142     WIMI_BinData_t pt_path;
       
   143     //TPtrC8 ACIFpathPtr;
       
   144     WIMI_BinData_t fileContent;
       
   145     
       
   146     // Do initialization
       
   147     InitializePathsAndSizes();
       
   148 
       
   149     if ( !iWimRef || ( iPathACIF.Length() == 0 ) )
       
   150         {
       
   151         callStatus = WIMI_ERR_KeyNotFound; // Mapped to KErrNotFound
       
   152         }
       
   153 
       
   154     _WIMTRACE2(_L("WIM | WIMServer | CWimJavaProvisioning::ACIFFileContentL | iACFFileSize=%d"), iACFFileSize);
       
   155 
       
   156     if ( callStatus == KErrNone )
       
   157         {
       
   158         pt_path.ui_buf_length = ( TUint16 )iPathACIF.Length();
       
   159         pt_path.pb_buf = ( TUint8* )iPathACIF.Ptr();
       
   160 
       
   161         
       
   162         fileContent.pb_buf = NULL;
       
   163         fileContent.ui_buf_length = 0;
       
   164     
       
   165        
       
   166         //Get ACIF file
       
   167         WIMI_STAT callStatus = WIMI_GetJAVAFile(iWimRef,
       
   168                                                 &pt_path,
       
   169                                                 &fileContent );
       
   170         }
       
   171 
       
   172     if ( callStatus == KErrNone )
       
   173         {
       
   174         TJavaProv javaProvisioning;
       
   175         javaProvisioning.iSize = fileContent.ui_buf_length;
       
   176         javaProvisioning.iJavaData = NULL; //The value will be reset in Client side
       
   177         TPckgBuf<TJavaProv> javaFilePckg( javaProvisioning );
       
   178        
       
   179         TPtrC8 ACIFFileContentPtr( fileContent.pb_buf, fileContent.ui_buf_length );
       
   180         TInt err = aMessage.Write( 1, ACIFFileContentPtr );
       
   181         if( err )
       
   182             {
       
   183             WSL_OS_Free( fileContent.pb_buf );
       
   184             User::Leave( err );
       
   185             }
       
   186         aMessage.Complete( KErrNone );
       
   187         }
       
   188     else
       
   189         {
       
   190         aMessage.Complete( CWimUtilityFuncs::MapWIMError( callStatus ) );	
       
   191         }    
       
   192         
       
   193      WSL_OS_Free( fileContent.pb_buf ); // Deallocate file content buffer    
       
   194     _WIMTRACE(_L("WIM | WIMServer | CWimJavaProvisioning::ACIFFileContentL | End"));
       
   195     }
       
   196 
       
   197 
       
   198 // -----------------------------------------------------------------------------
       
   199 // CWimJavaProvisioning::ACFFileContentL
       
   200 // Write content of ACIF file to client memory
       
   201 // -----------------------------------------------------------------------------
       
   202 //
       
   203 void CWimJavaProvisioning::ACFFileContentL( const RMessage2& aMessage )
       
   204     {
       
   205     _WIMTRACE(_L("WIM | WIMServer | CWimJavaProvisioning::ACFFileContentL | Begin"));
       
   206 
       
   207     TUint16 callStatus = KErrNone;
       
   208     WIMI_BinData_t pt_path;
       
   209     WIMI_BinData_t fileContent;
       
   210     
       
   211     aMessage.ReadL( 2, iPathACF );
       
   212     
       
   213     if ( !iWimRef || ( iPathACF.Length() == 0 ) )
       
   214         {
       
   215         callStatus = WIMI_ERR_KeyNotFound; // Mapped to KErrNotFound
       
   216         }
       
   217 
       
   218     if ( callStatus == KErrNone )
       
   219         {
       
   220         pt_path.ui_buf_length = ( TUint16 )iPathACF.Length();
       
   221         pt_path.pb_buf = ( TUint8* )iPathACF.Ptr();
       
   222 
       
   223         fileContent.pb_buf = NULL;
       
   224         fileContent.ui_buf_length = 0;
       
   225     
       
   226         //Get ACIF file
       
   227         WIMI_STAT callStatus = WIMI_GetJAVAFile(iWimRef,
       
   228                                                 &pt_path,
       
   229                                                 &fileContent );
       
   230         }
       
   231 
       
   232     if ( callStatus == KErrNone )
       
   233         {
       
   234         TJavaProv javaProvisioning;
       
   235         javaProvisioning.iSize = fileContent.ui_buf_length;
       
   236         javaProvisioning.iJavaData = NULL; //The value will be reset in Client side
       
   237         TPckgBuf<TJavaProv> javaFilePckg( javaProvisioning );
       
   238        
       
   239         TPtrC8 ACFFileContentPtr( fileContent.pb_buf, fileContent.ui_buf_length );
       
   240         TInt err = aMessage.Write( 1, ACFFileContentPtr );
       
   241         if( err )
       
   242             {
       
   243             WSL_OS_Free( fileContent.pb_buf );
       
   244             User::Leave( err );
       
   245             }
       
   246         aMessage.Complete( KErrNone );
       
   247         }
       
   248     else
       
   249         {
       
   250         aMessage.Complete( CWimUtilityFuncs::MapWIMError( callStatus ) );	
       
   251         }    
       
   252         
       
   253     WSL_OS_Free( fileContent.pb_buf ); // Deallocate file content buffer
       
   254     _WIMTRACE(_L("WIM | WIMServer | CWimJavaProvisioning::ACFFileContentL | End"));
       
   255     }
       
   256 
       
   257 
       
   258 // -----------------------------------------------------------------------------
       
   259 // CWimJavaProvisioning::LabelAndPath
       
   260 // -----------------------------------------------------------------------------
       
   261 //
       
   262 void CWimJavaProvisioning::LabelAndPath( const RMessage2& aMessage )
       
   263    {
       
   264    _WIMTRACE(_L("WIM | WIMServer | CWimJavaProvisioning::LabelAndPath | Begin"));
       
   265 
       
   266     TUint16 callStatus = KErrNone;
       
   267     
       
   268     WIMI_BinData_t path;
       
   269     WIMI_BinData_t label;
       
   270     
       
   271     if( iWimRef )
       
   272         {
       
   273         free_WIMI_Ref_t( iWimRef );
       
   274         iWimRef = NULL;
       
   275         }
       
   276     iWimRef = WIMI_GetWIMRef( 0 );
       
   277 
       
   278     if ( !iWimRef )
       
   279         {
       
   280         callStatus = WIMI_ERR_KeyNotFound; // Mapped to KErrNotFound
       
   281         }
       
   282 
       
   283     if ( callStatus == KErrNone )
       
   284         {
       
   285         path.pb_buf = NULL;
       
   286         label.pb_buf = NULL;
       
   287         
       
   288         path.ui_buf_length = 0;
       
   289         label.ui_buf_length = 0;
       
   290     
       
   291         //Get Path and label
       
   292         callStatus = WIMI_GetLabelAndPath(iWimRef,
       
   293                                           &path,
       
   294                                           &label );
       
   295         }
       
   296 
       
   297     if ( callStatus == KErrNone )
       
   298         {
       
   299         TPtrC8 PathPtr( path.pb_buf, path.ui_buf_length );
       
   300         TPtrC8 LabelPtr( label.pb_buf, label.ui_buf_length );
       
   301         
       
   302         TInt err = KErrNone; 
       
   303         err = aMessage.Write( 0, LabelPtr );
       
   304         if ( err != KErrNone )
       
   305             {
       
   306             aMessage.Complete( err );
       
   307             return;	
       
   308             }
       
   309         	  
       
   310         err = aMessage.Write( 1, PathPtr );
       
   311         if ( err != KErrNone )
       
   312             {
       
   313             aMessage.Complete( err );
       
   314             return;	
       
   315             }
       
   316 
       
   317         aMessage.Complete( KErrNone );
       
   318         }
       
   319     else
       
   320         {
       
   321         aMessage.Complete( CWimUtilityFuncs::MapWIMError( callStatus ) );	
       
   322         }    
       
   323           
       
   324     _WIMTRACE(_L("WIM | WIMServer | CWimJavaProvisioning::OmaFileContentL | End"));	
       
   325    }
       
   326     
       
   327     
       
   328 // -----------------------------------------------------------------------------
       
   329 // CWimJavaProvisioning::InitializePathsAndSizes
       
   330 // Initializes the path and size data members
       
   331 // -----------------------------------------------------------------------------
       
   332 //
       
   333 void CWimJavaProvisioning::InitializePathsAndSizes()
       
   334     {
       
   335     _WIMTRACE(_L("WIM | WIMServer | CWimJavaProvisioning::InitializePathsAndSizesL | Begin"));
       
   336 
       
   337     // Do initialization only if initialization is not done
       
   338     if ( !iFileInfosInitialized )
       
   339         {
       
   340         TUint16 callStatus = KErrNone;
       
   341 
       
   342         TBuf8<KWimProvACIFFileOidLength> ACIFOid;
       
   343         
       
   344         ACIFOid.Copy( KWimProvACIFFileOID, KWimProvACIFFileOidLength );
       
   345 
       
   346         TBuf8<KWimProvACIFFileOidLengthTaged> ACIFOidTaged;
       
   347 
       
   348         ACIFOidTaged.Copy( KWimProvACIFFileOIDTaged,
       
   349                                 KWimProvACIFFileOidLengthTaged );
       
   350         
       
   351         WIMI_BinData_t path;
       
   352         path.pb_buf = NULL;
       
   353         path.ui_buf_length = 0;
       
   354 
       
   355         WIMI_File_Info* fileInfos = NULL;
       
   356 
       
   357         TUint16 fileCount = 0;
       
   358 
       
   359         WIMI_BinData_t fileOid;
       
   360         fileOid.pb_buf = NULL;
       
   361         fileOid.ui_buf_length = 0;
       
   362 
       
   363         // Get WIM reference, reader is always 0
       
   364         if ( iWimRef )
       
   365             {
       
   366             free_WIMI_Ref_t( iWimRef );
       
   367             iWimRef = NULL;
       
   368             }
       
   369         iWimRef = WIMI_GetWIMRef( 0 );
       
   370 
       
   371         if ( !iWimRef )
       
   372             {
       
   373             callStatus = WIMI_ERR_BadReference;
       
   374             }
       
   375     
       
   376         if ( callStatus == KErrNone )
       
   377             {
       
   378 
       
   379             // Get Java file info from Wimlib
       
   380             callStatus = WIMI_JAVAFileInfo( iWimRef,
       
   381                                            &fileInfos,
       
   382                                            &fileCount );
       
   383             }
       
   384 
       
   385         if ( callStatus == KErrNone )
       
   386             {
       
   387             TBuf8<KWimJavaOidLengthTaged> oidBuf; // Buffer for OID
       
   388 
       
   389             // Loop all file infos and safe path to each file
       
   390             for ( TInt i = 0; i < fileCount; i++ )
       
   391                 {
       
   392                 // Get file OID from infos
       
   393                 fileOid.pb_buf = fileInfos[i].t_oid.pb_buf;
       
   394                 fileOid.ui_buf_length = fileInfos[i].t_oid.ui_buf_length;
       
   395                 oidBuf.FillZ();
       
   396                 oidBuf.Copy( fileOid.pb_buf, fileOid.ui_buf_length );
       
   397 
       
   398                 // File path
       
   399                 path.pb_buf = fileInfos[i].b_path.pb_buf;
       
   400                 path.ui_buf_length = fileInfos[i].b_path.ui_buf_length;
       
   401 
       
   402                 // Compare OIDs
       
   403                 if ( !oidBuf.Compare( ACIFOid ) 
       
   404                     || !oidBuf.Compare( ACIFOidTaged ) ) // ACIF File
       
   405                     {
       
   406                     // Copy file path to member
       
   407                     iPathACIF.Copy( path.pb_buf, path.ui_buf_length );
       
   408                     
       
   409                     // Set file size
       
   410                     iACIFFileSize = fileInfos[i].ui_file_size;
       
   411 
       
   412                     // Check if path is given but size not. If path exists and
       
   413                     // size == 0 then parse size from fetched file
       
   414                     if ( iPathACIF.Length() > 0 &&
       
   415                          iACIFFileSize == 0 )
       
   416                         {
       
   417                         WIMI_BinData_t pt_path;
       
   418 
       
   419                         WIMI_BinData_t fileContent;
       
   420                         
       
   421                         pt_path.ui_buf_length = ( TUint16 )iPathACIF.Length();
       
   422                         pt_path.pb_buf = ( TUint8* )iPathACIF.Ptr();
       
   423         
       
   424                         fileContent.pb_buf = NULL;
       
   425                         fileContent.ui_buf_length = 0;
       
   426     
       
   427                         //Get ACIF file
       
   428                         WIMI_STAT callStatus = WIMI_GetJAVAFile(iWimRef,
       
   429                                                                  &pt_path,      
       
   430                                                                  &fileContent );
       
   431                        iACIFFileSize = fileContent.ui_buf_length;
       
   432                        }
       
   433                     }
       
   434                 
       
   435                 }
       
   436             }
       
   437         iFileInfosInitialized = ETrue;
       
   438         }
       
   439     }
       
   440 
       
   441 // -----------------------------------------------------------------------------
       
   442 // CWimJavaProvisioning::InitializeSizes
       
   443 // Initializes the path and size data members
       
   444 // -----------------------------------------------------------------------------
       
   445 //
       
   446 void CWimJavaProvisioning::InitializeSize()
       
   447    {
       
   448      _WIMTRACE(_L("WIM | WIMServer | CWimJavaProvisioning::InitializeSizesL | Begin"));
       
   449 
       
   450     // Do initialization only if initialization is not done
       
   451 
       
   452     if ( iPathACF.Length() > 0 )
       
   453        {
       
   454        WIMI_BinData_t pt_path;
       
   455 
       
   456        WIMI_BinData_t fileContent;
       
   457 
       
   458        // Get WIM reference, reader is always 0
       
   459        if ( iWimRef )
       
   460            {
       
   461            free_WIMI_Ref_t( iWimRef );
       
   462            iWimRef = NULL;
       
   463            }
       
   464        iWimRef = WIMI_GetWIMRef( 0 );
       
   465                         
       
   466        pt_path.ui_buf_length = ( TUint16 )iPathACF.Length();
       
   467        pt_path.pb_buf = ( TUint8* )iPathACF.Ptr();
       
   468         
       
   469        fileContent.pb_buf = NULL;
       
   470        fileContent.ui_buf_length = 0;
       
   471     
       
   472        //Get ACIF file
       
   473        WIMI_STAT callStatus = WIMI_GetJAVAFile(iWimRef,
       
   474                                                &pt_path,      
       
   475                                                &fileContent );
       
   476                                                
       
   477        iACFFileSize = fileContent.ui_buf_length;                
       
   478        }
       
   479     else
       
   480        {
       
   481        iACFFileSize = 0;	
       
   482        }         
       
   483 
       
   484   }