diff -r 000000000000 -r 1bce908db942 multimediacommsengine/tsrc/testdriver/siptester/src/TCmdGetProfile.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommsengine/tsrc/testdriver/siptester/src/TCmdGetProfile.cpp Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,302 @@ +/* +* 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 "TCmdGetProfile.h" +#include "CTcSIPProfileContainer.h" + +#include + +/** + * INPUT: + * Headers: - + * Parameters: - + * IDs: ProfileId, RegistryId + * + * OUTPUT: + * Parameters: Type, IapId, AORs, PrivateIdentity, Name, SigComp, + * AutoRegistration, SecurityNegotiation, Server, + * ServerParameter, ServerExtensionParameter, + * ExtensionParameter, Default, Enabled + * IDs: - + */ +void TCmdGetProfile::ExecuteL() + { + // -- Setup --------------------------------------------------------------- + + // Get selected registry + CTcSIPProfileContainer& container = SelectProfileL(); + + // Get profile from the profile registry + CSIPManagedProfile& profile = GetManagedProfileL( container ); + + // -- Execution ----------------------------------------------------------- + + // -- Response creation --------------------------------------------------- + + GetProfileParamsL( container, &profile ); + + } + +void TCmdGetProfile::GetProfileParamsL( + CTcSIPProfileContainer& aContainer, + CSIPManagedProfile* aProfile ) + { + __ASSERT_ALWAYS( aProfile, User::Leave( KErrArgument ) ); + // Type + TSIPProfileTypeInfo type = aProfile->Type(); + if( type.iSIPProfileName != KNullDesC8 ) + { + CTcStructure* s1 = AddStructureResponseL( KParamProfileType ); + s1->AddItemL( KParamProfileClass, type.iSIPProfileClass ); + s1->AddItemL( KParamProfileName, type.iSIPProfileName ); + } + + // IapName + TUint32 iapId( 0 ); + User::LeaveIfError( aProfile->GetParameter( KSIPAccessPointId, iapId ) ); + AddTextResponseL( KParamIAPName, iContext.IAPNameL( iapId ) ); + + // AOR + const TDesC8* aor = NULL; + aProfile->GetParameter( KSIPUserAor, aor ); + if( aor && *aor != KNullDesC8 ) + { + AddTextResponseL( KParamProfileAOR, *aor ); + } + + // Registered AOR(s) + const MDesC8Array* aors = NULL; + aProfile->GetParameter( KSIPRegisteredAors, aors ); + if( aors && aors->MdcaCount() > 0 ) + { + AddArrayResponseL( KParamProfileAORs, *aors ); + } + + // PrivateIdentity + const TDesC8* privateIdentity = NULL; + aProfile->GetParameter( KSIPPrivateIdentity, privateIdentity ); + if( privateIdentity && *privateIdentity != KNullDesC8 ) + { + AddTextResponseL( KParamProfilePrivateIdentity, *privateIdentity ); + } + + // Name + const TDesC8* name = NULL; + aProfile->GetParameter( KSIPProviderName, name ); + if( name && *name != KNullDesC8 ) + { + AddTextResponseL( KParamProfileName, *name ); + } + + // SigComp + TBool isSigCompEnabled( EFalse ); + aProfile->GetParameter( KSIPSigComp, isSigCompEnabled ); + AddBooleanResponseL( KParamProfileSigComp, isSigCompEnabled ); + + // AutoRegistration + + TBool isAutoRegEnabled( EFalse ); + aProfile->GetParameter( KSIPAutoRegistration, isAutoRegEnabled ); + AddBooleanResponseL( KParamProfileAutoRegistration, isAutoRegEnabled ); + + // SecurityNegotiation + TBool isSecNegEnabled( EFalse ); + aProfile->GetParameter( KSIPSecurityNegotiation, isSecNegEnabled ); + AddBooleanResponseL( KParamProfileSecurityNegotiation, isSecNegEnabled ); + + // NegotiatedSecMechanism + const TDesC8* secmech = NULL; + aProfile->GetParameter( KSIPNegotiatedSecurityMechanism, secmech ); + if( secmech && *secmech != KNullDesC8 ) + { + AddTextResponseL( KParamNegotiatedSecMechanism, *secmech ); + } + + // Server + const TDesC8* address = NULL; + + aProfile->GetParameter( KSIPRegistrar, KSIPServerAddress, address ); + if( address && *address != KNullDesC8 ) + { + CTcStructure* s1 = AddStructureResponseL( KParamProfileServer ); + s1->AddItemL( KRegistrar, *address ); + } + else + { + aProfile->GetParameter( KSIPOutboundProxy, KSIPServerAddress, address ); + if( address && *address != KNullDesC8 ) + { + CTcStructure* s1 = AddStructureResponseL( KParamProfileServer ); + s1->AddItemL( KOutboundProxy, *address ); + } + } + + // ServerParameter + ServerParameterL( KSIPRegistrar, KSIPDigestRealm, aProfile ); + ServerParameterL( KSIPRegistrar, KSIPDigestUserName, aProfile ); + ServerParameterL( KSIPOutboundProxy, KSIPDigestRealm, aProfile ); + ServerParameterL( KSIPOutboundProxy, KSIPDigestUserName, aProfile ); + + // ServerExtensionParameter + CTcStructure* structure; + do { + structure = FindStructureL( KParamProfileServerExtensionParameter, EFalse ); + if( structure ) + { + TPtrC8 server = structure->ItemL( KParamProfileServer )->Value(); + + const CTcNameValue* extensionParam = structure->ItemL( 1 ); + + TUint32 serverType = ServerL( structure ); + + const TDesC8* value = NULL; + aProfile->GetParameter( serverType, extensionParam->NameAsIntL(), value ); + if( value && *value != KNullDesC8 ) + { + CTcStructure* s1 = AddStructureResponseL( KParamProfileServerExtensionParameter ); + s1->AddItemL( KParamProfileServer, server ); + s1->AddItemL( extensionParam->Name(), *value ); + } + iContext.List().RemoveParameter( KParamProfileServerExtensionParameter ); + } + } while( structure ); + + // ExtensionParameter + do { + structure = FindStructureL( KParamProfileExtensionParameter, EFalse ); + if( structure ) + { + const CTcNameValue* extensionParam = structure->ItemL( 0 ); + + const TDesC8* value = NULL; + TBool boolVal( EFalse ); + TUint32 intVal( 0 ); + + if ( aProfile->GetParameter( extensionParam->NameAsIntL(), value ) != KErrNotFound ) + { + if( value && *value != KNullDesC8 ) + { + CTcStructure* s1 = AddStructureResponseL( KParamProfileExtensionParameter ); + s1->AddItemL( extensionParam->Name(), *value ); + } + } + else if ( aProfile->GetParameter( extensionParam->NameAsIntL(), boolVal ) != KErrNotFound ) + { + CTcStructure* s1 = AddStructureResponseL( KParamProfileExtensionParameter ); + s1->AddBooleanItemL( extensionParam->Name(), boolVal ); + } + else if ( aProfile->GetParameter( extensionParam->NameAsIntL(), intVal ) != KErrNotFound ) + { + CTcStructure* s1 = AddStructureResponseL( KParamProfileExtensionParameter ); + s1->AddItemL( extensionParam->Name(), intVal ); + } + else + { + } + + iContext.List().RemoveParameter( KParamProfileExtensionParameter ); + } + } while( structure ); + + // Header params + CTcArray* headerParamsArr = FindArrayL( KParamProfileHeaderParams, EFalse ); + if( headerParamsArr && headerParamsArr->Count() > 0 ) + { + TUint32 paramType( 0 ); + TLex8 lexer( headerParamsArr->Item( 0 ) ); + User::LeaveIfError( lexer.Val( paramType, EDecimal ) ); + + headerParamsArr->RemoveItem( 0 ); + const MDesC8Array* arr = 0; + aProfile->GetParameter( paramType, arr ); + if( arr && arr->MdcaCount() > 0 ) + { + AddArrayResponseL( KParamProfileHeaderParams, *arr ); + } + } + + // Default + TBool isDefault( EFalse ); + aProfile->GetParameter( KSIPDefaultProfile, isDefault ); + AddBooleanResponseL( KParamProfileDefault, isDefault ); + + // Enabled status + AddBooleanResponseL( KParamProfileEnabled, + aContainer.ProfileRegistry().IsEnabled( *aProfile ) ); + } + + +TBool TCmdGetProfile::Match( const TTcIdentifier& aId ) + { + return TTcSIPCommandBase::Match( aId, _L8("GetProfile") ); + } + +TTcCommandBase* TCmdGetProfile::CreateL( MTcTestContext& aContext ) + { + return new( ELeave ) TCmdGetProfile( aContext ); + } + +TPtrC8 TCmdGetProfile::ServerToString( TUint32 aServer ) + { + TPtrC8 value; + if( aServer == KSIPRegistrar ) + { + value.Set( KRegistrar ); + } + else if( aServer == KSIPOutboundProxy ) + { + value.Set( KOutboundProxy ); + } + + return value; + } + +void TCmdGetProfile::ServerParameterL( TUint32 aServer, + TUint32 aServerParameter, + const CSIPProfile* aSipProfile ) + { + const TDesC8* value = NULL; + aSipProfile->GetParameter( aServer, aServerParameter, value ); + + if( value && *value != KNullDesC8 ) + { + CTcStructure* s1 = AddStructureResponseL( KParamProfileServerParameter ); + + // Set server type + TPtrC8 string = ServerToString( aServer ); + if( string != KNullDesC8 ) + { + s1->AddItemL( KParamProfileServer, string ); + } + + // Set server parameter + if( aServerParameter == KSIPDigestRealm ) + { + string.Set( KDigestRealm ); + } + else if( aServerParameter == KSIPDigestUserName ) + { + string.Set( KDigestUsername ); + } + + s1->AddItemL( KParamProfileParameter, string ); + s1->AddItemL( KParamProfileValue, *value ); + } + } +