// ----------------------------------------------------------------------------- // 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; }
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; }