multimediacommsengine/tsrc/testdriver/siptester/src/TCmdGetProfile.cpp
changeset 0 1bce908db942
--- /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 <sipmanagedprofile.h>
+
+/**
+ * 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 );
+		}
+	}
+