diff -r 000000000000 -r 1bce908db942 multimediacommsengine/tsrc/testdriver/siptester/src/TCmdCreateProfile.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommsengine/tsrc/testdriver/siptester/src/TCmdCreateProfile.cpp Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,373 @@ +/* +* Copyright (c) 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: Implementation +* +*/ + +#include "CTcSIPContext.h" +#include "SIPConstants.h" +#include "TCmdCreateProfile.h" +#include "CTcSIPProfileContainer.h" + +#include +#include +#include "tclog.h" + +/** + * INPUT: + * Headers: - + * Parameters: ProfileType*, IapName*, ProfileAORList*, PrivateIdentity*, + * ProfileName*, SigComp*, + * AutoRegistration*, SecurityNegotiation*, Server*, + * ServerParameter*, ServerExtensionParameter*, + * ExtensionParameter*, ProfileDefault* + * IDs: RegistryId + * + * OUTPUT: + * Parameters: - + * IDs: - + */ +void TCmdCreateProfile::ExecuteL() + { + // -- Setup --------------------------------------------------------------- + // Get selected registry + CTcSIPProfileContainer& container = SelectProfileL(); + + // Create a new profile, if type parameter is not found use default + // Internet, IETF + CSIPManagedProfile* profile = NULL; + CTcStructure* structure = FindStructureL( KParamProfileType, EFalse ); + if( structure ) + { + profile = container.ManagedProfileRegistry().CreateL( ProfileTypeInfoL( structure ) ); + } + else + { + TSIPProfileTypeInfo typeInfo; + typeInfo.iSIPProfileClass = TSIPProfileTypeInfo::EInternet; + typeInfo.iSIPProfileName = KIETF; + profile = container.ManagedProfileRegistry().CreateL( typeInfo ); + } + CleanupStack::PushL( profile ); + + // -- Execution ----------------------------------------------------------- + SetProfileParamsL( profile ); + + // Saving the profile + container.ManagedProfileRegistry().SaveL( *profile ); + + CleanupStack::Pop( profile ); + + container.AddManagedProfileL( profile ); //store profile + + // -- Response creation --------------------------------------------------- + + AddProfileIdResponseL( *profile ); + } + +void TCmdCreateProfile::SetProfileParamsL( CSIPManagedProfile* aProfile ) + { + // Type + TcLog::WriteFormat( _L8("-- Get optional structure \"ProfileType\"") ); + CTcStructure* structure = FindStructureL( KParamProfileType, EFalse ); + if( structure ) + { + TcLog::Write( KLogOk ); + aProfile->SetType( ProfileTypeInfoL( structure ) ); + } + else + { + TcLog::Write( KLogNotFound ); + } + + // IapId + TPtrC8 iapname = ExtractTextL( KParamIAPName, EFalse ); + if( iapname != KNullDesC8 ) + { + TBuf8< KTcMaxTypeName > objectName( iapname ); + TcLog::WriteFormat( _L8("-- Fetching IAP Id for name \"%s\""), objectName.PtrZ() ); + TUint32 iapId = iContext.IAPIdL( iapname ); + User::LeaveIfError( aProfile->SetParameter( KSIPAccessPointId, iapId ) ); + TcLog::Write( KLogOk ); + } + + // AORs + TcLog::WriteFormat( _L8("-- Get optional array \"ProfileAORList\"") ); + CTcArray* aorsArr = FindArrayL( KParamProfileAORs, EFalse ); + if( aorsArr ) + { + // Use first item of aorsArr + TPtrC8 aor = aorsArr->AsMDesCArray().MdcaPoint( 0 ); + if( aor != KNullDesC8 ) + { + TcLog::Write( KLogOk ); + User::LeaveIfError( aProfile->SetParameter( KSIPUserAor, aor ) ); + } + } + else + { + TcLog::Write( KLogNotFound ); + } + + // Headers + TcLog::WriteFormat( _L8("-- Get optional array \"ProfileHeadersList\"") ); + CTcArray* headersArr = FindArrayL( KParamProfileHeaders, EFalse ); + if( headersArr ) + { + TcLog::Write( KLogOk ); + User::LeaveIfError( aProfile->SetParameter( KSIPHeaders, headersArr->AsMDesCArray() ) ); + } + else + { + TcLog::Write( KLogNotFound ); + } + + // Header params + TcLog::WriteFormat( _L8("-- Get optional array \"ProfileHeaderParamsList\"") ); + CTcArray* headerParamsArr = FindArrayL( KParamProfileHeaderParams, EFalse ); + if( headerParamsArr && headerParamsArr->Count() > 0 ) + { + TcLog::Write( KLogOk ); + + TUint32 paramType( 0 ); + TLex8 lexer( headerParamsArr->Item( 0 ) ); + User::LeaveIfError( lexer.Val( paramType, EDecimal ) ); + + headerParamsArr->RemoveItem( 0 ); + User::LeaveIfError( aProfile->SetParameter( paramType, headerParamsArr->AsMDesCArray() ) ); + } + else + { + TcLog::Write( KLogNotFound ); + } + + // PrivateIdentity + TPtrC8 privateIdentity = ExtractTextL( KParamProfilePrivateIdentity, EFalse ); + if( privateIdentity != KNullDesC8 ) + { + User::LeaveIfError( aProfile->SetParameter( KSIPPrivateIdentity, privateIdentity ) ); + } + + // Name + TPtrC8 name = ExtractTextL( KParamProfileName, EFalse ); + if( name != KNullDesC8 ) + { + User::LeaveIfError( aProfile->SetParameter( KSIPProviderName, name ) ); + } + + // SigComp + if( HasBooleanL( KParamProfileSigComp ) ) + { + User::LeaveIfError( aProfile->SetParameter( KSIPSigComp, + ExtractBooleanL( KParamProfileSigComp, EFalse ) ) ); + } + + // AutoRegistration + if( HasBooleanL( KParamProfileAutoRegistration ) ) + { + User::LeaveIfError( aProfile->SetParameter( KSIPAutoRegistration, + ExtractBooleanL( KParamProfileAutoRegistration, EFalse ) ) ); + } + + // SecurityNegotiation + if( HasBooleanL( KParamProfileSecurityNegotiation ) ) + { + User::LeaveIfError( aProfile->SetParameter( KSIPSecurityNegotiation, + ExtractBooleanL( KParamProfileSecurityNegotiation, EFalse ) ) ); + } + + // Server + do + { + structure = FindStructureL( KParamProfileServer, EFalse ); + if( structure ) + { + User::LeaveIfError( aProfile->SetParameter( + ServerL( structure ), + KSIPServerAddress, + structure->ItemL( KParamProfileAddress )->Value() ) ); + + iContext.List().RemoveParameter( KParamProfileServer ); + } + } while( structure ); + + + // ServerParameter + do + { + structure = FindStructureL( KParamProfileServerParameter, EFalse ); + if( structure ) + { + User::LeaveIfError( aProfile->SetParameter( ServerL( structure ), + ServerParameterL( structure ), + structure->ItemL( 1 )->Value() ) ); + iContext.List().RemoveParameter( KParamProfileServerParameter ); + } + } while( structure ); + + // ServerExtensionParameter + do + { + structure = FindStructureL( KParamProfileServerExtensionParameter, EFalse ); + if( structure ) + { + CTcNameValue* item = structure->ItemL( 1 ); + User::LeaveIfError( aProfile->SetParameter( ServerL( structure ), + item->NameAsIntL(), item->Value() ) ); + iContext.List().RemoveParameter( KParamProfileServerExtensionParameter ); + } + } while( structure ); + + // ExtensionParameter + do + { + structure = FindStructureL( KParamProfileExtensionParameter, EFalse ); + if( structure ) + { + const CTcNameValue* item = structure->ItemL( 0 ); + + TInt extInt( 0 ); + TRAPD( err, extInt = item->ValueAsIntL() ); + if ( !err ) + { + User::LeaveIfError( + aProfile->SetParameter( item->NameAsIntL(), + static_cast( extInt ) ) ); + } + else + { + TBool extBool( EFalse ); + TRAPD( err2, extBool = item->ValueAsBooleanL() ); + if ( !err2 ) + { + User::LeaveIfError( aProfile->SetParameter( item->NameAsIntL(), extBool ) ); + } + else + { + User::LeaveIfError( aProfile->SetParameter( item->NameAsIntL(), item->Value() ) ); + } + } + + iContext.List().RemoveParameter( KParamProfileExtensionParameter ); + } + } while( structure ); + + // Default + if( ExtractBooleanL( KParamProfileDefault, EFalse ) ) + { + // Can set only to true + User::LeaveIfError( aProfile->SetParameter( KSIPDefaultProfile, ETrue ) ); + } + + } + +TBool TCmdCreateProfile::Match( const TTcIdentifier& aId ) + { + return TTcSIPCommandBase::Match( aId, _L8("CreateProfile") ); + } + +TTcCommandBase* TCmdCreateProfile::CreateL( MTcTestContext& aContext ) + { + return new( ELeave ) TCmdCreateProfile( aContext ); + } + +TUint32 TCmdCreateProfile::ServerL( CTcStructure* aStruct ) + { + TUint32 server( KSIPRegistrar ); + TPtrC8 value = aStruct->ItemL( KParamProfileServer )->Value(); + + if( value == KRegistrar ) + { + server = KSIPRegistrar; + } + else if( value == KOutboundProxy ) + { + server = KSIPOutboundProxy; + } + else + { + User::Leave( KTcErrMandatoryStructureItemNotFound ); + } + + return server; + } + +TUint32 TCmdCreateProfile::ServerParameterL( CTcStructure* aStruct ) + { + TUint32 serverParameter = KSIPDigestRealm; + TPtrC8 value = aStruct->ItemL( 1 )->Name(); + + if( value == KDigestRealm ) + { + serverParameter = KSIPDigestRealm; + } + else if( value == KDigestUsername ) + { + serverParameter = KSIPDigestUserName; + } + else if( value == KDigestPassword ) + { + serverParameter = KSIPDigestPassword; + } + else + { + User::Leave( KTcErrMandatoryStructureItemNotFound ); + } + + return serverParameter; + } + +TSIPProfileTypeInfo TCmdCreateProfile::ProfileTypeInfoL( CTcStructure* aStruct ) + { + TSIPProfileTypeInfo typeInfo; + TcLog::WriteFormat( _L8("-- Get mandatory structure item \"ProfileName\"") ); + typeInfo.iSIPProfileName = aStruct->ItemL( KParamProfileName )->Value(); + TcLog::Write( KLogOk ); + + typeInfo.iSIPProfileClass = ProfileTypeClassL( aStruct ); + + + + return typeInfo; + } + +TSIPProfileTypeInfo::TSIPProfileClass + TCmdCreateProfile::ProfileTypeClassL( CTcStructure* aStruct ) + { + TcLog::WriteFormat( _L8("-- Get mandatory structure item \"Class\"") ); + + TSIPProfileTypeInfo::TSIPProfileClass typeClass = TSIPProfileTypeInfo::EInternet; + TPtrC8 value = aStruct->ItemL( KParamProfileClass )->Value(); + + if( value == KInternet ) + { + typeClass = TSIPProfileTypeInfo::EInternet; + } + else if( value == KIms ) + { + typeClass = TSIPProfileTypeInfo::EIms; + } + else if( value == KOther ) + { + typeClass = TSIPProfileTypeInfo::EOther; + } + + else + { + User::Leave( KTcErrMandatoryStructureItemNotFound ); + } + TcLog::Write( KLogOk ); + + return typeClass; + }