cms/src/CCMSX509GeneralNames.cpp
changeset 0 164170e6151a
equal deleted inserted replaced
-1:000000000000 0:164170e6151a
       
     1 /*
       
     2 * Copyright (c) 2004 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:  X.509 GeneralNames type
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 // INCLUDE FILES
       
    20 #include    "CCMSX509GeneralNames.h"
       
    21 #include "CCMSX509GeneralName.h"
       
    22 #include <asn1dec.h>
       
    23 #include <asn1enc.h>
       
    24 
       
    25 // CONSTANTS
       
    26 const TInt KCMSGranularity = 1;
       
    27 
       
    28 // ============================ MEMBER FUNCTIONS ===============================
       
    29 
       
    30 // -----------------------------------------------------------------------------
       
    31 // CCMSX509GeneralNames::CCMSX509GeneralNames
       
    32 // C++ default constructor can NOT contain any code, that
       
    33 // might leave.
       
    34 // -----------------------------------------------------------------------------
       
    35 //
       
    36 EXPORT_C CCMSX509GeneralNames::CCMSX509GeneralNames()
       
    37     {
       
    38     }
       
    39 
       
    40 // -----------------------------------------------------------------------------
       
    41 // CCMSX509GeneralNames::ConstructL
       
    42 // Symbian 2nd phase constructor can leave.
       
    43 // -----------------------------------------------------------------------------
       
    44 //
       
    45 EXPORT_C void CCMSX509GeneralNames::ConstructL(
       
    46     const CArrayPtr< CCMSX509GeneralName >& aGeneralNames )
       
    47     {
       
    48     SetGeneralNamesL( aGeneralNames );
       
    49     }
       
    50 
       
    51 // -----------------------------------------------------------------------------
       
    52 // CCMSX509GeneralNames::NewL
       
    53 // Two-phased constructor.
       
    54 // -----------------------------------------------------------------------------
       
    55 //
       
    56 EXPORT_C CCMSX509GeneralNames* CCMSX509GeneralNames::NewL()
       
    57 	{
       
    58 	// creating with empty/default values
       
    59     CCMSX509GeneralNames* self = new( ELeave ) CCMSX509GeneralNames();
       
    60     CleanupStack::PushL( self );
       
    61     CArrayPtr< CCMSX509GeneralName >* nameArray =
       
    62         new( ELeave ) CArrayPtrFlat< CCMSX509GeneralName >( KCMSGranularity );
       
    63     self->iGeneralNames = nameArray;
       
    64     CleanupStack::Pop( self );
       
    65     return self;
       
    66 	}
       
    67 
       
    68 // -----------------------------------------------------------------------------
       
    69 // CCMSX509GeneralNames::NewL
       
    70 // Two-phased constructor.
       
    71 // -----------------------------------------------------------------------------
       
    72 //
       
    73 EXPORT_C CCMSX509GeneralNames* CCMSX509GeneralNames::NewL(
       
    74     const CArrayPtr< CCMSX509GeneralName >& aGeneralNames )
       
    75 	{
       
    76     CCMSX509GeneralNames* self =
       
    77     	new( ELeave ) CCMSX509GeneralNames();
       
    78 
       
    79     CleanupStack::PushL( self );
       
    80     self->ConstructL( aGeneralNames );
       
    81     CleanupStack::Pop( self );
       
    82 	return self;
       
    83 	}
       
    84 
       
    85 // -----------------------------------------------------------------------------
       
    86 // CCMSX509GeneralNames::NewL
       
    87 // Two-phased copy constructor.
       
    88 // -----------------------------------------------------------------------------
       
    89 //
       
    90 EXPORT_C CCMSX509GeneralNames* CCMSX509GeneralNames::NewL(
       
    91     const CCMSX509GeneralNames& aGeneralNames )
       
    92 	{
       
    93     CCMSX509GeneralNames* self =
       
    94     	new( ELeave ) CCMSX509GeneralNames();
       
    95 
       
    96     CleanupStack::PushL( self );
       
    97     self->ConstructL( aGeneralNames.GeneralNames() );
       
    98     CleanupStack::Pop( self );
       
    99 	return self;
       
   100 	}
       
   101 
       
   102 // Destructor
       
   103 CCMSX509GeneralNames::~CCMSX509GeneralNames()
       
   104     {
       
   105     if( iGeneralNames )
       
   106         {
       
   107         iGeneralNames->ResetAndDestroy();
       
   108         delete iGeneralNames;
       
   109         }
       
   110     }
       
   111 
       
   112 // -----------------------------------------------------------------------------
       
   113 // CCMSX509GeneralNames::DecodeL
       
   114 // Decrypts raw data to this instance
       
   115 // -----------------------------------------------------------------------------
       
   116 void CCMSX509GeneralNames::DecodeL( const TDesC8& aRawData )
       
   117 	{
       
   118     CArrayPtr< TASN1DecGeneric >* nameData =
       
   119         DecodeSequenceLC( aRawData );
       
   120     TInt nameCount = nameData->Count();
       
   121     if( nameCount == 0 )
       
   122         {
       
   123         User::Leave( KErrArgument );
       
   124         }
       
   125     CArrayPtr< CCMSX509GeneralName >* names =
       
   126         new( ELeave ) CArrayPtrFlat< CCMSX509GeneralName >( nameCount );
       
   127     CleanupStack::PushL( names );
       
   128     for( TInt i = 0; i < nameCount; i++ )
       
   129         {
       
   130         CCMSX509GeneralName* name = CCMSX509GeneralName::NewL( );
       
   131         CleanupStack::PushL( name );
       
   132         name->DecodeL( nameData->At( i )->Encoding() );
       
   133         names->AppendL( name );
       
   134         }
       
   135     CleanupStack::Pop( nameCount ); // names
       
   136     CleanupStack::Pop( names );
       
   137     CleanupStack::PopAndDestroy( nameData );
       
   138     if( iGeneralNames )
       
   139         {
       
   140         iGeneralNames->ResetAndDestroy();
       
   141         delete iGeneralNames;
       
   142         }
       
   143     iGeneralNames = names;
       
   144 	}
       
   145 
       
   146 // -----------------------------------------------------------------------------
       
   147 // CCMSX509GeneralNames::EncoderLC
       
   148 // Returns ASN1 encoder for this instance
       
   149 // -----------------------------------------------------------------------------
       
   150 
       
   151 CASN1EncBase* CCMSX509GeneralNames::EncoderLC() const
       
   152 	{
       
   153     CASN1EncSequence* root = CASN1EncSequence::NewLC();
       
   154     TInt nameCount = iGeneralNames->Count();
       
   155     for( TInt i = 0; i < nameCount; i++ )
       
   156         {
       
   157         HBufC8* encodedName = NULL;
       
   158         iGeneralNames->At( i )->EncodeL( encodedName );
       
   159         CleanupStack::PushL( encodedName );
       
   160         CASN1EncEncoding* singleName = CASN1EncEncoding::NewLC( *encodedName );
       
   161         root->AddAndPopChildL( singleName );
       
   162         CleanupStack::PopAndDestroy( encodedName );
       
   163         }
       
   164 
       
   165    	return root;
       
   166 	}
       
   167 
       
   168 // -----------------------------------------------------------------------------
       
   169 // CCMSX509GeneralNames::GeneralNames
       
   170 // GeneralNames getter
       
   171 // -----------------------------------------------------------------------------
       
   172 EXPORT_C const CArrayPtr< CCMSX509GeneralName >&
       
   173 CCMSX509GeneralNames::GeneralNames() const
       
   174 	{
       
   175 	return *iGeneralNames;
       
   176 	}
       
   177 
       
   178 // -----------------------------------------------------------------------------
       
   179 // CCMSX509GeneralNames::SetGeneralNamesL
       
   180 // GeneralNames setter
       
   181 // -----------------------------------------------------------------------------
       
   182 EXPORT_C void CCMSX509GeneralNames::SetGeneralNamesL(
       
   183 	const CArrayPtr< CCMSX509GeneralName >& aGeneralNames )
       
   184 	{
       
   185     TInt nameCount = aGeneralNames.Count();
       
   186     if( nameCount == 0 )
       
   187         {
       
   188         User::Leave ( KErrArgument );
       
   189         }
       
   190     CArrayPtr< CCMSX509GeneralName >* names =
       
   191         new( ELeave ) CArrayPtrFlat< CCMSX509GeneralName >( nameCount );
       
   192     CleanupStack::PushL( names );
       
   193     for( TInt i = 0; i < nameCount; i++ )
       
   194         {
       
   195         CCMSX509GeneralName* origName = aGeneralNames[ i ];
       
   196         CCMSX509GeneralName* name =
       
   197             CCMSX509GeneralName::NewL( origName->Tag(), origName->Data() );
       
   198         CleanupStack::PushL( name );
       
   199         names->AppendL( name );
       
   200         }
       
   201     CleanupStack::Pop( nameCount ); // names
       
   202     CleanupStack::Pop( names );
       
   203     if( iGeneralNames )
       
   204         {
       
   205         iGeneralNames->ResetAndDestroy();
       
   206         delete iGeneralNames;
       
   207         }
       
   208     iGeneralNames = names;
       
   209 	}
       
   210 
       
   211 //  End of File