realtimenetprots/sipfw/ProfileAgent/Client/Src/sipprofile.cpp
changeset 0 307788aac0a8
child 2 1e1cc61f56c3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/ProfileAgent/Client/Src/sipprofile.cpp	Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,465 @@
+// Copyright (c) 2002-2009 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:
+// Name        : sipprofile
+// Part of     : SIP Profile Client
+// implementation
+// Version     : 1.0
+// INCLUDE FILES
+//
+
+
+
+#include "sipprofile.h"
+#include "sipmanagedprofile.h"
+#include "sipprofileregistry.h"
+#include "sipconcreteprofile.h"
+#include "sipprofiletypeinfo.h"
+#include <e32const.h>
+#include <cmmanager.h>
+
+
+_LIT8(KSIPProfileExtenstionParameter, "%u");
+const TUint KProfileBufferSize = 25;
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSIPProfile::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CSIPProfile* CSIPProfile::NewL(CSIPProfileRegistry* aSIPRegistry)
+	{
+    CSIPProfile* self = CSIPProfile::NewLC (aSIPRegistry);
+    CleanupStack::Pop(self);
+    return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfile::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CSIPProfile* CSIPProfile::NewLC(CSIPProfileRegistry* aSIPRegistry)
+	{
+	CSIPProfile* self = new(ELeave)CSIPProfile(aSIPRegistry);
+    CleanupStack::PushL (self);
+    self->ConstructL ();
+    return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfile::~CSIPProfile
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSIPProfile::~CSIPProfile()
+	{
+	if(iSIPProfileRegistry)
+		{
+		iSIPProfileRegistry->ProfileDeleted(*this);	
+		}
+
+	delete iSIPProfile;
+	iSIPProfile = 0;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfile::Type
+// -----------------------------------------------------------------------------
+//	
+EXPORT_C const TSIPProfileTypeInfo& CSIPProfile::Type() const
+	{
+	return iSIPProfile->ProfileType();
+	}	
+
+// -----------------------------------------------------------------------------
+// CSIPProfile::GetParameter
+// -----------------------------------------------------------------------------
+//	
+EXPORT_C TInt CSIPProfile::GetParameter(TUint32 aParam, TDesC8 const *& aVal) const
+	{
+	switch (aParam)
+		{
+		case KSIPProviderName:
+			{
+			const TDesC8& val= iSIPProfile->ProviderName();
+			aVal = &val;
+			break;
+			}
+		case KSIPUserAor:
+			{
+			const TDesC8& val = iSIPProfile->AOR();
+			aVal = &val;
+			break;
+			}
+		case KSIPPrivateIdentity:
+			{
+			const TDesC8& val = iSIPProfile->PrivateIdentity();
+			aVal = &val;
+			break;
+			}
+		case KSIPNegotiatedSecurityMechanism:
+			{
+			if(iSIPProfileRegistry)
+				{
+				TRAPD(err,iSIPProfileRegistry->NegotiatedSecurityMechanismL(*iSIPProfile));
+				if (err != KErrNone)
+					{
+					return err;
+					}
+				}
+			const TDesC8& val = iSIPProfile->NegotiatedSecurityMechanism();
+			aVal = &val;
+			break;
+			}
+		case KSIPProfileId:
+		case KSIPAccessPointId:
+		case KSIPSigComp:
+		case KSIPSecurityNegotiation:
+		case KSIPAutoRegistration:
+		case KSIPProfileRegistered:
+		case KSIPRegisteredAors:
+		case KSIPDefaultProfile:
+		case KSIPContactHeaderParams:
+		case KSIPRegistrar:
+		case KSIPOutboundProxy:
+		case KSIPDigestUserName:
+		case KSIPDigestRealm:
+		case KSIPServerAddress:
+		case KSIPDigestPassword:
+			{
+			return KErrNotFound;
+			}
+		default:
+			{
+			return iSIPProfile->ExtensionParameter(aParam, aVal);
+			}
+		}
+	return KErrNone;
+	}	
+
+// -----------------------------------------------------------------------------
+// CSIPProfile::GetParameter
+// -----------------------------------------------------------------------------
+//	
+EXPORT_C TInt CSIPProfile::GetParameter(TUint32 aParam, TUint32& aVal) const
+	{
+	TInt res(KErrNone);
+	switch (aParam)
+		{
+		case KSIPProfileId:
+			aVal = ((iSIPProfile != 0)?iSIPProfile->Id():0);
+			break;
+		case KSIPAccessPointId:
+			aVal = iSIPProfile->IapId();
+			break;
+		case KSIPSnapId:
+			// Explicit check for SNAP ID inorder to return default SNAP in case of KMaxTUint32.
+			{
+			res = iSIPProfile->ExtensionParameter(aParam, aVal);
+			if(aVal == KMaxTUint32)
+				{ 
+				TRAPD(err,DefaultSNAPL(aVal));
+				if (err)
+				    {
+				    return err;
+				    }	
+				}
+				break;
+			}	
+					
+		default:
+			//If aParam is one of the predefined values (e.g. KSIPSigComp),
+			//it won't be found and ExtensionParameter returns KErrNotFound.
+			return iSIPProfile->ExtensionParameter(aParam, aVal);
+		}
+	return res;
+	}	
+
+// -----------------------------------------------------------------------------
+// CSIPProfile::GetParameter
+// -----------------------------------------------------------------------------
+//	
+EXPORT_C TInt CSIPProfile::GetParameter(TUint32 aParam, TBool& aVal) const
+	{
+	switch (aParam)
+		{
+		case KSIPSigComp:
+			aVal = iSIPProfile->IsSigCompEnabled();
+			break;
+		case KSIPAutoRegistration:
+			aVal = iSIPProfile->IsAutoRegistrationEnabled();
+			break;
+		case KSIPSecurityNegotiation:
+			aVal = iSIPProfile->IsSecurityNegotiationEnabled();
+			break;
+		case KSIPProfileRegistered:
+			aVal = (iSIPProfile->Status() == CSIPConcreteProfile::ERegistered);
+			break;
+		case KSIPDefaultProfile:
+		    if(iSIPProfileRegistry)
+		        {
+			    TRAPD(err, aVal = iSIPProfileRegistry->IsDefaultProfileL(*this));
+			    if (err)
+				    {
+				    return err;
+				    }		        
+		        }
+
+			break;
+		default:			
+			//If aParam is one of the predefined values it won't be found and
+			//ExtensionParameter returns KErrNotFound.
+			return iSIPProfile->ExtensionParameter(aParam, aVal);
+		}
+	return KErrNone;
+	}	
+
+// -----------------------------------------------------------------------------
+// CSIPProfile::GetParameter
+// -----------------------------------------------------------------------------
+//	
+EXPORT_C TInt CSIPProfile::GetParameter(TUint32 aParam, 
+	MDesC8Array const *& aVal) const
+	{
+	switch (aParam)
+		{
+		case KSIPRegisteredAors:
+			{
+			if(iSIPProfileRegistry)
+				{
+				TRAPD(err, iSIPProfileRegistry->RegisteredAORsL(*iSIPProfile));
+				if (err != KErrNone)
+					{
+					return err;
+					}
+				}
+			const MDesC8Array& array = iSIPProfile->RegisteredAORs();
+			aVal = &array;
+			}
+			break;
+		case KSIPContactHeaderParams:
+			{
+			const MDesC8Array& array = iSIPProfile->ContactHeaderParams();
+			aVal = &array;
+			}
+			break;
+		case KSIPHeaders:
+			{
+			const MDesC8Array& array = iSIPProfile->SIPHeaders();
+			aVal = &array;
+			}
+			break;			
+		default:
+			//If aParam is one of the predefined values (e.g. KSIPRegistrar),
+			//it won't be found and ExtensionParameter returns KErrNotFound.
+			return iSIPProfile->ExtensionParameter(aParam, aVal);
+		}
+	return KErrNone;
+	}	
+
+// -----------------------------------------------------------------------------
+// CSIPProfile::GetParameter
+// -----------------------------------------------------------------------------
+//	
+EXPORT_C TInt CSIPProfile::GetParameter(TUint32 aServerType,
+	TUint32 aParam, TDesC8 const *& aVal) const
+	{
+	switch (aParam)
+		{
+		case KSIPDigestRealm:
+		case KSIPDigestUserName:
+			{
+			const TDesC8& val = iSIPProfile->ServerParameter(aServerType, aParam);
+			aVal = &val;
+			break;
+			}
+		case KSIPServerAddress:
+			{
+			const TDesC8& val = iSIPProfile->Server(aServerType);
+			aVal = &val;
+			break;
+			}
+
+		case KSIPDigestPassword:
+			{
+			return KErrPermissionDenied;
+			}
+
+		case KSIPProfileId:
+		case KSIPProviderName:
+		case KSIPAccessPointId:
+		case KSIPSigComp:
+		case KSIPSecurityNegotiation:
+		case KSIPAutoRegistration:
+		case KSIPUserAor:
+		case KSIPProfileRegistered:
+		case KSIPRegisteredAors:
+		case KSIPNegotiatedSecurityMechanism:
+		case KSIPDefaultProfile:
+		case KSIPContactHeaderParams:
+		case KSIPRegistrar:
+		case KSIPOutboundProxy:
+		case KSIPPrivateIdentity:
+		case KSIPSoIpTOS:
+			{
+			return KErrNotFound;
+			}
+		default:
+			{
+			TBuf8<KProfileBufferSize> buf;
+			buf.Format(KSIPProfileExtenstionParameter, aParam);
+			const TDesC8& val = iSIPProfile->ServerExtensionParameter(
+				aServerType, buf);
+			aVal = &val;
+			break;
+			}
+		}
+	return KErrNone;
+	}	
+
+// -----------------------------------------------------------------------------
+// CSIPProfile::CSIPProfile
+// -----------------------------------------------------------------------------
+//	
+CSIPProfile::CSIPProfile(CSIPProfileRegistryBase* aRegistry):
+	iSIPProfileRegistry(aRegistry), iEnabled(EFalse)
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfile::ConstructL
+// -----------------------------------------------------------------------------
+//	
+void CSIPProfile::ConstructL()
+	{
+	iSIPProfile = CSIPConcreteProfile::NewL();
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfile::SetEnabled
+// -----------------------------------------------------------------------------
+//	
+void CSIPProfile::SetEnabled(TBool aEnabled)
+	{
+	iEnabled = aEnabled;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfile::SetConcreteProfile
+// -----------------------------------------------------------------------------
+//	
+void CSIPProfile::SetConcreteProfile(CSIPConcreteProfile* aProfile)
+	{
+	delete iSIPProfile;
+	iSIPProfile = aProfile;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfile::ClearConcreteProfile
+// -----------------------------------------------------------------------------
+//	
+void CSIPProfile::ClearConcreteProfile()
+	{
+	iSIPProfile = 0;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfile::ConcreteProfile
+// -----------------------------------------------------------------------------
+//	
+CSIPConcreteProfile& CSIPProfile::ConcreteProfile()
+	{
+	return *iSIPProfile;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfile::ConcreteProfile
+// -----------------------------------------------------------------------------
+//	
+const CSIPConcreteProfile& CSIPProfile::ConcreteProfile() const
+	{
+	return *iSIPProfile;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfile::IsEnabled
+// -----------------------------------------------------------------------------
+//	
+TBool CSIPProfile::IsEnabled() const
+	{
+	return iEnabled;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfile::LastRegistrationError
+// -----------------------------------------------------------------------------
+//	
+TInt CSIPProfile::LastRegistrationError() const
+	{
+	return iSIPProfile->LastRegistrationError();
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfile::SetRegistry
+// -----------------------------------------------------------------------------
+//	
+void CSIPProfile::SetRegistry(CSIPProfileRegistryBase* aRegistry)
+	{
+	iSIPProfileRegistry = aRegistry;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfile::ClearRegistry
+// -----------------------------------------------------------------------------
+//	
+void CSIPProfile::ClearRegistry()
+	{
+	iSIPProfileRegistry = 0;
+	}
+	
+// -----------------------------------------------------------------------------
+// CSIPProfile::IsContextActive
+// -----------------------------------------------------------------------------
+//	
+TBool CSIPProfile::IsContextActive() const
+	{
+	return (iEnabled && iSIPProfile->Status() == CSIPConcreteProfile::ERegistered);
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfile::ContextId
+// -----------------------------------------------------------------------------
+//	
+TUint32 CSIPProfile::ContextId() const
+	{
+	return iSIPProfile->ContextId();
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfile::DefaultSNAPL
+// -----------------------------------------------------------------------------
+//		
+void CSIPProfile::DefaultSNAPL(TUint32& aSnapId) const
+	
+		{
+			RCmManager cmManager;
+			cmManager.OpenL();
+			CleanupClosePushL(cmManager);
+			TCmDefConnValue defConn;
+			cmManager.ReadDefConnL( defConn );
+			aSnapId = defConn.iId;	
+			CleanupStack::PopAndDestroy();
+		}
+