// -----------------------------------------------------------------------------
// X509CertNameParser::GetFullNameL
// 
// -----------------------------------------------------------------------------
TInt X509CertNameParser::GetFullNameL( 
                              const CX500DistinguishedName& aDN, 
                              const CX509CertExtension* aExtension,
                              HBufC*& aName,
                              const TDesC& aLabel )
    {
    CDesCArrayFlat* nameArray = new( ELeave ) CDesCArrayFlat(3);
    CleanupStack::PushL( nameArray );
    // Add label to array. It is used for comparing.
    nameArray->AppendL( aLabel );

    // Collect name parts to array
    GetNamePartsL( aDN, aExtension, *nameArray, EX509CNPFullName);
    
    // Count length of the aName.
    TInt length = 0;
    TInt i = 1; // Pass label
    for ( ; i < nameArray->MdcaCount(); i++ )
        { 
        length += (*nameArray)[i].Length();
        length += KX509CNPComma.iTypeLength;
        }
    
    // Add elements of the array to aName.
    // First element is label, so it is passed.
    aName = HBufC::NewLC( length );
    for ( i = 1; i < nameArray->MdcaCount(); i++ )
        {
        if ( i != 1 )
            {
            aName->Des().Append( KX509CNPComma );
            }
        aName->Des().Append( (*nameArray)[i] );   
        }

    CleanupStack::Pop( aName ); 
    CleanupStack::PopAndDestroy( nameArray ); 

    return KErrNone;
    }
Exemplo n.º 2
0
void T_CSPSettings::T_CSPSettings_FindServiceNamesLL(  )
    {
    RIdArray ids;
    CleanupClosePushL( ids );
    iCSPSettings->FindServiceIdsL( ids );
    
    CDesCArrayFlat* names = new ( ELeave ) CDesCArrayFlat( 10 );
    CleanupStack::PushL( names );
    EUNIT_ASSERT( KErrNone == iCSPSettings->FindServiceNamesL( ids, *names ) );
    TInt count = names->MdcaCount();
    EUNIT_ASSERT( count );
    
    CleanupStack::PopAndDestroy( names );
    CleanupStack::PopAndDestroy( &ids );
    }
// -----------------------------------------------------------------------------
// X509CertNameParser::PrimaryAndSecondaryNameL
//
// -----------------------------------------------------------------------------
EXPORT_C TInt X509CertNameParser::PrimaryAndSecondaryNameL( 
                                      const CX509Certificate& aCertificate,
                                      HBufC*& aPrimaryName, 
                                      HBufC*& aSecondaryName,
                                      const TDesC& aLabel)
    {
    // Get subjectname
    const CX500DistinguishedName& dName = aCertificate.SubjectName();
    // Get subject alternative name
    const CX509CertExtension* extension = 
        aCertificate.Extension( KSubjectAltName );

    CDesCArrayFlat* nameArray = new( ELeave ) CDesCArrayFlat(3);
    CleanupStack::PushL( nameArray );
    // Append label to array
    nameArray->AppendL( aLabel );
    
    // Get PrimaryName and SecondaryName to nameArray if they exists.
    GetNamePartsL( dName, extension, *nameArray, EX509CNPPrimAndSecond );
    
    // Make sure that these are NULL
    aPrimaryName = NULL;
    aSecondaryName = NULL;

    switch ( nameArray->MdcaCount() )
        {
        case 1: //Neither PrimaryName nor SecondaryName found
            {
            aPrimaryName = HBufC::NewLC( KNullDesC.iTypeLength );
            *aPrimaryName = KNullDesC;
            aSecondaryName = HBufC::NewLC( KNullDesC.iTypeLength );
            *aSecondaryName = KNullDesC;
            break;
            }
        case 2: // Only PrimaryName found
            {
            aPrimaryName = HBufC::NewLC(( *nameArray)[1].Length() );
            *aPrimaryName = ( *nameArray )[1];
            aSecondaryName = HBufC::NewLC( KNullDesC.iTypeLength );
            *aSecondaryName = KNullDesC;
            break;
            }
        case 3: // Both found
            {
            aPrimaryName = HBufC::NewLC(( *nameArray)[1].Length() );
            *aPrimaryName = ( *nameArray )[1];
            aSecondaryName = HBufC::NewLC( ( *nameArray )[2].Length() );
            *aSecondaryName = ( *nameArray )[2];
            break;
            }
        default: // Something went wrong.
            {
            aPrimaryName = HBufC::NewLC( KNullDesC.iTypeLength );
            *aPrimaryName = KNullDesC;
            aSecondaryName = HBufC::NewLC( KNullDesC.iTypeLength );
            *aSecondaryName = KNullDesC;
            break;
            }
        }

    if ( aSecondaryName )
        {
        CleanupStack::Pop( aSecondaryName ); // aSecondaryName
        }
    if ( aPrimaryName )
        {
        CleanupStack::Pop( aPrimaryName ); // aPrimaryName
        }
    CleanupStack::PopAndDestroy( nameArray ); //  nameArray
    return KErrNone;
    }