appinstaller/AppinstUi/Plugin/CommonUI/Src/CUICertificateDetailsDialog.cpp
changeset 0 ba25891c3a9e
child 25 7333d7932ef7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/Plugin/CommonUI/Src/CUICertificateDetailsDialog.cpp	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,237 @@
+/*
+* Copyright (c) 2002-2004 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:   This file contains the implementation of 
+*                CCUICertificateDetailsDialog class member functions.
+*
+*/
+
+
+// INCLUDE FILES
+#include <aknmessagequerydialog.h>
+#include <StringLoader.h>
+#include <SWInstCommonUI.rsg>
+#include <AknUtils.h>
+#include <hash.h>                  
+
+#include "CUICertificateDetailsDialog.h"
+#include "CUIDetailsDialog.h"
+
+using namespace SwiUI::CommonUI;
+
+// CONSTANTS
+_LIT( KNextLine, "\n" );
+_LIT( KNextNextLine, "\n\n" );
+_LIT( KHexFormat, "%02X" );
+const TInt KMaxLengthTextSerialNumberFormatting = 3;
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CCUICertificateDetailsDialog::CCUICertificateDetailsDialog
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CCUICertificateDetailsDialog::CCUICertificateDetailsDialog()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CCUICertificateDetailsDialog::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CCUICertificateDetailsDialog::ConstructL()
+    {
+   
+    }
+
+// -----------------------------------------------------------------------------
+// CCUICertificateDetailsDialog::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CCUICertificateDetailsDialog* CCUICertificateDetailsDialog::NewL()
+
+    {
+    CCUICertificateDetailsDialog* self = new ( ELeave ) CCUICertificateDetailsDialog();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self; 
+    }
+
+// Destructor
+CCUICertificateDetailsDialog::~CCUICertificateDetailsDialog()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CCUICertificateDetailsDialog::AddFieldLC
+// Adds a field (header and value) to the dialog.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CCUICertificateDetailsDialog::AddFieldLC( HBufC*& aMessage,
+                                               TInt aHeaderResourceId,
+                                               const TDesC& aValue )
+    {
+    HBufC* headerString = StringLoader::LoadLC( aHeaderResourceId );
+    HBufC* newMessage;
+    
+    if ( aMessage->Length() > 0 )
+        {
+        newMessage = HBufC::NewL( headerString->Length() +
+	                          aValue.Length() +
+                                  aMessage->Length() + 
+                                  3 ); // \n\n, \n
+        
+        TPtr ptr( newMessage->Des() );
+        ptr += *aMessage;        
+        ptr += KNextNextLine;        
+        ptr += *headerString;
+        ptr += KNextLine;
+        ptr += aValue;
+        }
+    else
+        {
+        newMessage = HBufC::NewL( headerString->Length() + aValue.Length() + 1 ); // \n
+
+        TPtr ptr( newMessage->Des() );                
+        ptr += *headerString;
+        ptr += KNextLine;
+        ptr += aValue;
+        }
+
+    CleanupStack::PopAndDestroy( headerString );
+    CleanupStack::PopAndDestroy( aMessage );  
+  
+    aMessage = newMessage;    
+    CleanupStack::PushL( aMessage );  
+    }
+
+// -----------------------------------------------------------------------------
+// CCUICertificateDetailsDialog::ExecuteLD
+// Executes the dialog.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CCUICertificateDetailsDialog::ExecuteLD( const CCUICertificateInfo& aCertInfo )
+    {
+    CleanupStack::PushL( this );
+    
+    // Valid from
+    HBufC* validFrom = DateToStringLC( aCertInfo.ValidFromL() );
+
+    // Valid until
+    HBufC* validTo = DateToStringLC( aCertInfo.ValidToL() );
+    
+    // Serial
+    TPtrC8 serialPtr( aCertInfo.SerialNumberL() );
+    HBufC* serial = HBufC::NewLC( serialPtr.Length() * 2 );
+    TBuf<KMaxLengthTextSerialNumberFormatting> buf;
+    
+    for ( TInt index = 0; index < serialPtr.Length(); index++ )
+        {
+        buf.Format( KHexFormat, serialPtr[index] ); 
+        serial->Des().Append( buf );
+        }
+
+    // Fingerprint   
+    HBufC* fingerprint = HBufC::NewLC( aCertInfo.FingerprintL().Length() * 5 );
+    DevideToBlocks( aCertInfo.FingerprintL(), fingerprint->Des() );
+    
+    // Fingerprint (MD5)
+    HBufC* fingerprint_md = HBufC::NewLC( aCertInfo.FingerprintL().Length() * 5 );
+    if ( aCertInfo.EncodingL() != KNullDesC8 )
+        {
+    	CMD5* md5 = CMD5::NewL();
+        CleanupStack::PushL( md5 );
+        DevideToBlocks( md5->Hash( aCertInfo.EncodingL() ), fingerprint_md->Des() );
+        CleanupStack::PopAndDestroy( md5 );
+        }
+    
+    HBufC* message = HBufC::NewLC( 0 );
+
+    // Costruct the fields
+    AddFieldLC( message, R_SWCOMMON_SEC_ISSUER, aCertInfo.IssuerNameL() ); 
+    AddFieldLC( message, R_SWCOMMON_SEC_SUBJECT, aCertInfo.SubjectNameL() );
+    AddFieldLC( message, R_SWCOMMON_SEC_VALID_FROM, *validFrom );
+    AddFieldLC( message, R_SWCOMMON_SEC_VALID_UNTIL, *validTo );
+    AddFieldLC( message, R_SWCOMMON_SEC_SERIAL, *serial );
+    AddFieldLC( message, R_SWCOMMON_SEC_FINGERPRINT, *fingerprint );
+    if ( fingerprint_md->Length() > 0 )
+        {
+    	AddFieldLC( message, R_SWCOMMON_SEC_FINGERPRINT_MD, *fingerprint_md );
+        }
+    
+
+    // Create and show the message query dialog
+    CAknMessageQueryDialog* dlg = CAknMessageQueryDialog::NewL( *message );
+    dlg->PrepareLC( R_SWCOMMON_SEC_DETAILS_DIALOG );
+    dlg->RunLD();
+
+    CleanupStack::PopAndDestroy( 7 );  // message, fingerprint_md, fingerprint, serial, validTo, validFrom
+    }
+
+// -----------------------------------------------------------------------------
+// CCUICertificateDetailsDialog::DateToString
+// Converts date to local format.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+HBufC* CCUICertificateDetailsDialog::DateToStringLC( const TDateTime& aDate )
+    {
+    // Create date descriptors.
+    // We use Avkon date format string to format the date into correct format.
+    HBufC* dateFormatString = StringLoader::LoadLC( R_QTN_DATE_USUAL_WITH_ZERO );
+    
+    TBuf<30> timeString;    
+    TTime time( aDate );
+        
+    time.FormatL( timeString, *dateFormatString );
+    CleanupStack::PopAndDestroy( dateFormatString );   
+    HBufC* tmp = timeString.AllocLC();
+
+    TPtr ptr = tmp->Des();
+    AknTextUtils::DisplayTextLanguageSpecificNumberConversion( ptr ); 
+
+    return tmp;    
+    }
+
+// -----------------------------------------------------------------------------
+// CCUICertificateDetailsDialog::DevideToBlocks
+// Devides input descriptor to blocks.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CCUICertificateDetailsDialog::DevideToBlocks( const TDesC8& aInput, TPtr aOutput )
+    {
+    const TInt KBlockLength = 2;    
+    TInt blockIndex = 0;
+    _LIT( KBlockSeparator, " " );
+
+    for ( TInt index = 0 ; index < aInput.Length() ; index++ )
+        {
+        if ( blockIndex == KBlockLength )
+            {
+            aOutput.Append( KBlockSeparator );
+            blockIndex = 0;
+            }
+        aOutput.AppendNumFixedWidthUC( (TUint)(aInput[index]), EHex, 2 );
+        ++blockIndex;
+        }
+    }
+//  End of File