--- /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 <sipmanagedprofile.h>
+#include <sipmanagedprofileregistry.h>
+#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<TUint32>( 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;
+ }