realtimenetprots/sipfw/ProfileAgent/Client/Src/SIPProfileITC.cpp
changeset 0 307788aac0a8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/ProfileAgent/Client/Src/SIPProfileITC.cpp	Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,583 @@
+// 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        : sipprofileitc
+// Part of     : SIP Profile Client
+// implementation
+// Version     : 1.0
+// INCLUDE FILES
+//
+
+
+
+#include "SIPProfileITC.h"
+#include "SIPRemoteProfile.h"
+#include "sipconcreteprofile.h"
+#include "sipconcreteprofileholder.h"
+#include "sipprofileslots.h"
+#include "sipprofileplugins.h"
+
+const TInt  KBufInitSize = 100;
+
+// -----------------------------------------------------------------------------
+// template::InternalizeL
+// -----------------------------------------------------------------------------
+//
+template<class T> T* InternalizeL(const TDesC8& aBuf)
+	{
+	CBufFlat* internalizeBuf = CBufFlat::NewL(KBufInitSize);
+	CleanupStack::PushL(internalizeBuf);
+	internalizeBuf->InsertL(0,aBuf);
+
+	RBufReadStream readStream(*internalizeBuf,0);
+	readStream.PushL();
+	T* profile = static_cast<T*>(T::InternalizeL(readStream));
+	readStream.Pop();
+	readStream.Close();
+	CleanupStack::PopAndDestroy(internalizeBuf);
+	return profile;
+	}
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITC::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CSIPProfileITC* CSIPProfileITC::NewL(RSIPProfile& aSipProfile)
+	{
+    CSIPProfileITC* self = CSIPProfileITC::NewLC (aSipProfile);
+    CleanupStack::Pop(self);
+    return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITC::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CSIPProfileITC* CSIPProfileITC::NewLC(RSIPProfile& aSipProfile)
+	{
+	CSIPProfileITC* self = new (ELeave) CSIPProfileITC(aSipProfile);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITC::CSIPProfileITC
+// -----------------------------------------------------------------------------
+//
+CSIPProfileITC::CSIPProfileITC(RSIPProfile& aSipProfile) 
+ : iHelper (aSipProfile)
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITC::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CSIPProfileITC::ConstructL()
+	{
+    iEmptyContent = HBufC8::NewL(0);
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITC::~CSIPProfileITC
+// -----------------------------------------------------------------------------
+//
+CSIPProfileITC::~CSIPProfileITC() 
+	{
+    delete iEmptyContent;
+	iEmptyContent = 0;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITC::AddSIPProfileL
+// -----------------------------------------------------------------------------
+//
+void CSIPProfileITC::AddSIPProfileL(CSIPConcreteProfile& aProfile)
+	{
+	TSIPProfileSlots ids;
+	iHelper.SendL(ids,ESipProfileItcOpAddProfile,aProfile);
+	aProfile.SetId(ids.iProfileId);
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITC::UpdateSIPProfileL
+// -----------------------------------------------------------------------------
+//
+void CSIPProfileITC::UpdateSIPProfileL(CSIPConcreteProfile& aProfile)
+	{
+	iHelper.SendL(ESipProfileItcOpUpdateProfile,aProfile);
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITC::SIPProfileUsageL
+// -----------------------------------------------------------------------------
+//
+TInt CSIPProfileITC::SIPProfileUsageL(TUint32 aProfileId) 
+	{
+	TSIPProfileSlots ids;
+	ids.iProfileId = aProfileId;
+	iHelper.SendL(ids,ESipProfileItcOpUsage);
+	return ids.iSlot1;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITC::RemoveSIPProfileL
+// -----------------------------------------------------------------------------
+//
+void CSIPProfileITC::RemoveSIPProfileL(TUint32 aProfileId) 
+	{
+    iITCMsgArgs.Set (ESipProfileItcArgProfileId, aProfileId); 
+	iHelper.SendL(iITCMsgArgs,ESipProfileItcOpRemoveProfile);
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITC::EnableSIPProfileL
+// -----------------------------------------------------------------------------
+//
+TInt CSIPProfileITC::EnableSIPProfileL(TUint32 aProfileId) 
+	{
+	TSIPProfileSlots ids;
+	ids.iProfileId = aProfileId;
+	iHelper.SendL(ids,ESipProfileItcOpEnable);
+	return ids.iSlot1;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITC::DisableSIPProfileL
+// -----------------------------------------------------------------------------
+//
+TInt CSIPProfileITC::DisableSIPProfileL(TUint32 aProfileId) 
+	{
+	TSIPProfileSlots ids;
+	ids.iProfileId = aProfileId;
+	iHelper.SendL(ids,ESipProfileItcOpDisable);
+	return ids.iSlot1;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITC::ForceDisableSIPProfileL
+// -----------------------------------------------------------------------------
+//
+TInt CSIPProfileITC::ForceDisableSIPProfileL(TUint32 aProfileId) 
+	{
+	TSIPProfileSlots ids;
+	ids.iProfileId = aProfileId;
+	iHelper.SendL(ids,ESipProfileItcOpForceDisable);
+	return ids.iSlot1;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITC::SIPProfileL
+// -----------------------------------------------------------------------------
+//
+CSIPConcreteProfile* CSIPProfileITC::SIPProfileL(TUint32 aProfileId, TUint aSize) 
+	{
+	TSIPProfileSlots ids;
+	ids.iProfileId = aProfileId;
+
+	if (aSize == 0) 
+		{
+		iHelper.SendL(ids,ESipProfileItcOpProfileSize);
+		aSize = ids.iSlot1;
+		if (aSize == 0) 
+			{
+			User::Leave(KErrNotFound);
+			}
+		}
+
+	HBufC8* buf = HBufC8::NewLC(aSize);
+	TPtr8 bufPtr = buf->Des();
+    iITCMsgArgs.Set(ESipProfileItcArgProfileId, aProfileId);
+    iITCMsgArgs.Set(ESipProfileItcArgProfile, &bufPtr);
+
+	iHelper.SendL(iITCMsgArgs,ESipProfileItcOpProfile);
+
+	CSIPConcreteProfile* profile = InternalizeL<CSIPConcreteProfile>(*buf);
+	
+	CleanupStack::PopAndDestroy(buf);
+
+	profile->SetDefault(EFalse);
+	return profile;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITC::SIPProfileRefreshL
+// -----------------------------------------------------------------------------
+//
+CSIPConcreteProfile* CSIPProfileITC::SIPProfileRefreshL(
+	TUint32 aProfileId, TUint aSize) 
+	{
+	__ASSERT_ALWAYS(aProfileId != 0, User::Leave(KErrArgument));
+	TSIPProfileSlots ids;
+	ids.iProfileId = aProfileId;
+
+	if (aSize == 0) 
+		{
+		iHelper.SendL(ids,ESipProfileItcOpProfileSize);
+		aSize = ids.iSlot1;
+		if (aSize == 0) 
+			{
+			User::Leave(KErrNotFound);
+			}
+		}
+
+	HBufC8* buf = HBufC8::NewLC(aSize);
+	TPtr8 bufPtr = buf->Des();
+    iITCMsgArgs.Set(ESipProfileItcArgProfileId, aProfileId);
+	iITCMsgArgs.Set(ESipProfileItcArgProfile, &bufPtr);
+	
+	iHelper.SendL(iITCMsgArgs,ESipProfileItcOpProfileRefresh);
+
+	CSIPConcreteProfile* profile = InternalizeL<CSIPConcreteProfile>(*buf);
+	
+	CleanupStack::PopAndDestroy(buf);
+
+	profile->SetDefault(EFalse);
+	return profile;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITC::SIPProfileDefaultL
+// -----------------------------------------------------------------------------
+//
+void CSIPProfileITC::SIPProfileDefaultL(TUint& aSize, TUint32& aProfileId) 
+	{
+	TSIPProfileSlots ids;
+	iHelper.SendL(ids,ESipProfileItcOpProfileSizeDefault);
+	aSize = ids.iSlot1;
+	aProfileId = ids.iProfileId;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITC::SIPProfilesByAORL
+// -----------------------------------------------------------------------------
+//
+CSIPConcreteProfileHolder* CSIPProfileITC::SIPProfilesByAORL(const TDesC8& aAOR) 
+	{
+	TSIPProfileSlots ids;
+
+	HBufC8* aor = aAOR.AllocL();
+	CleanupStack::PushL(aor);
+	TPtr8 aorPtr = aor->Des();
+
+    TPckgBuf<TSIPProfileSlots> sipIdsPckg(ids);
+	
+	iITCMsgArgs.Set(ESipProfileItcArgNarrator, &aorPtr);
+    iITCMsgArgs.Set(ESipProfileItcArgSlots, &sipIdsPckg);
+
+	iHelper.SendL(iITCMsgArgs, ESipProfileItcOpProfilesSizeByAOR);
+	ids = sipIdsPckg();
+
+	TUint size = ids.iSlot1;
+	HBufC8* buf = HBufC8::NewLC(size);
+	TPtr8 bufPtr = buf->Des();
+
+	iITCMsgArgs.Set(ESipProfileItcArgNarrator, &aorPtr);
+    iITCMsgArgs.Set(ESipProfileItcArgProfiles, &bufPtr);
+
+	iHelper.SendL(iITCMsgArgs, ESipProfileItcOpProfilesByAOR);
+
+	CSIPConcreteProfileHolder* holder = 
+		InternalizeL<CSIPConcreteProfileHolder>(*buf);
+	CleanupStack::PopAndDestroy(buf);
+	CleanupStack::PopAndDestroy(aor);
+	return holder;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITC::SIPProfileDefaultIdL
+// -----------------------------------------------------------------------------
+//
+TUint CSIPProfileITC::SIPProfileDefaultIdL()
+	{
+	TSIPProfileSlots ids;
+	iHelper.SendL(ids,ESipProfileItcOpProfileSizeDefault);
+	return ids.iProfileId;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITC::DeleteSIPProfileL
+// -----------------------------------------------------------------------------
+//
+void CSIPProfileITC::DeleteSIPProfileL(TUint32 aProfileId) 
+	{
+	iITCMsgArgs.Set(ESipProfileItcArgProfileId, aProfileId);
+
+	iHelper.SendL(iITCMsgArgs,ESipProfileItcOpDeleteProfile);
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITC::SIPProfilePluginsL
+// -----------------------------------------------------------------------------
+//
+CSIPProfilePlugins* CSIPProfileITC::SIPProfilePluginsL()
+	{
+	TSIPProfileSlots ids;
+	iHelper.SendL(ids,ESipProfileItcOpPluginsSize);
+	TUint size = ids.iSlot1;
+
+	HBufC8* buf = HBufC8::NewLC(size);
+	TPtr8 bufPtr = buf->Des();
+	iITCMsgArgs.Set(ESipProfileItcArgPlugins, &bufPtr);
+    
+	iHelper.SendL(iITCMsgArgs,ESipProfileItcOpPlugins);
+
+	CSIPProfilePlugins* plugins = InternalizeL<CSIPProfilePlugins>(*buf);	
+	CleanupStack::PopAndDestroy(buf);
+
+	return plugins;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITC::SIPProfilesL
+// -----------------------------------------------------------------------------
+//
+CSIPConcreteProfileHolder* CSIPProfileITC::SIPProfilesL()
+	{
+	TSIPProfileSlots ids;
+
+    TPckgBuf<TSIPProfileSlots> sipIdsPckg(ids);
+	
+    iITCMsgArgs.Set(ESipProfileItcArgSlots, &sipIdsPckg);
+
+	iHelper.SendL(iITCMsgArgs, ESipProfileItcOpProfilesSize);
+	ids = sipIdsPckg();
+
+	TUint size = ids.iSlot1;
+	HBufC8* buf = HBufC8::NewLC(size);
+	TPtr8 bufPtr = buf->Des();
+
+    iITCMsgArgs.Set(ESipProfileItcArgProfiles, &bufPtr);
+
+	iHelper.SendL(iITCMsgArgs, ESipProfileItcOpProfiles);
+
+	CSIPConcreteProfileHolder* holder = 
+		InternalizeL<CSIPConcreteProfileHolder>(*buf);
+	CleanupStack::PopAndDestroy(buf);
+	
+	return holder;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITC::SIPProfilesByTypeL
+// -----------------------------------------------------------------------------
+//
+CSIPConcreteProfileHolder* CSIPProfileITC::SIPProfilesByTypeL(
+	const TSIPProfileTypeInfo& aType) 
+	{
+	TSIPProfileSlots ids;
+
+	HBufC8* type = aType.iSIPProfileName.AllocL();
+	CleanupStack::PushL(type);
+	TPtr8 typePtr = type->Des();
+
+    TPckgBuf<TSIPProfileSlots> sipIdsPckg(ids);
+	
+	iITCMsgArgs.Set(ESipProfileItcArgNarrator, &typePtr);
+    iITCMsgArgs.Set(ESipProfileItcArgSlots, &sipIdsPckg);
+    iITCMsgArgs.Set(ESipProfileItcArgType, aType.iSIPProfileClass);
+
+	iHelper.SendL(iITCMsgArgs, ESipProfileItcOpProfilesSizeByType);
+	ids = sipIdsPckg();
+
+	TUint size = ids.iSlot1;
+	HBufC8* buf = HBufC8::NewLC(size);
+	TPtr8 bufPtr = buf->Des();
+
+	iITCMsgArgs.Set(ESipProfileItcArgNarrator, &typePtr);
+    iITCMsgArgs.Set(ESipProfileItcArgProfiles, &bufPtr);
+    iITCMsgArgs.Set(ESipProfileItcArgType, aType.iSIPProfileClass);
+
+	iHelper.SendL(iITCMsgArgs, ESipProfileItcOpProfilesByType);
+
+	CSIPConcreteProfileHolder* holder = 
+		InternalizeL<CSIPConcreteProfileHolder>(*buf);
+	CleanupStack::PopAndDestroy(buf);
+	CleanupStack::PopAndDestroy(type);
+	return holder;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITC::SIPCreateProfileL
+// -----------------------------------------------------------------------------
+//
+CSIPConcreteProfile* CSIPProfileITC::SIPCreateProfileL(
+	const TSIPProfileTypeInfo& aType) 
+	{
+	TSIPProfileSlots ids;
+
+	HBufC8* type = aType.iSIPProfileName.AllocL();
+	CleanupStack::PushL(type);
+	TPtr8 typePtr = type->Des();
+
+    TPckgBuf<TSIPProfileSlots> sipIdsPckg(ids);
+	
+	iITCMsgArgs.Set(ESipProfileItcArgNarrator, &typePtr);
+    iITCMsgArgs.Set(ESipProfileItcArgSlots, &sipIdsPckg);
+    iITCMsgArgs.Set(ESipProfileItcArgType, aType.iSIPProfileClass);
+
+	iHelper.SendL(iITCMsgArgs, ESipProfileItcOpCreateProfileSize);
+	ids = sipIdsPckg();
+
+	TUint size = ids.iSlot1;
+
+	if (size == 0)
+		{
+		User::Leave(KErrNotFound);	
+		}
+
+	HBufC8* buf = HBufC8::NewLC(size);
+	TPtr8 bufPtr = buf->Des();
+	iITCMsgArgs.Set(ESipProfileItcArgNarrator, &typePtr);
+    iITCMsgArgs.Set(ESipProfileItcArgSlots, &sipIdsPckg);
+    iITCMsgArgs.Set(ESipProfileItcArgType, aType.iSIPProfileClass);
+    iITCMsgArgs.Set(ESipProfileItcArgProfile, &bufPtr);
+
+	iHelper.SendL(iITCMsgArgs,ESipProfileItcOpCreateProfile);
+
+	CSIPConcreteProfile* profile = InternalizeL<CSIPConcreteProfile>(*buf);
+	
+	CleanupStack::PopAndDestroy(buf);
+	CleanupStack::PopAndDestroy(type);
+
+	return profile;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITC::NegotiatedSecurityMechanismL
+// -----------------------------------------------------------------------------
+//
+void CSIPProfileITC::NegotiatedSecurityMechanismL(CSIPConcreteProfile& aProfile)
+	{
+	TSIPProfileSlots ids;
+	ids.iProfileId = aProfile.Id();
+
+	iHelper.SendL(ids,ESipProfileItcOpNegotiatedSecuritySize);
+	TUint size = ids.iSlot1;
+	HBufC8* buf = HBufC8::NewLC(size);
+	if (size != 0) 
+		{
+		TPtr8 bufPtr = buf->Des();
+		iITCMsgArgs.Set(ESipProfileItcArgProfileId, aProfile.Id());
+		iITCMsgArgs.Set(ESipProfileItcArgNegotiated, &bufPtr);
+		iHelper.SendL(iITCMsgArgs,ESipProfileItcOpNegotiatedSecurity);
+		aProfile.SetNegotiatedSecurityMechanismL(*buf);
+		}
+	else
+		{
+		aProfile.SetNegotiatedSecurityMechanismL(*buf);
+		}
+	CleanupStack::PopAndDestroy(buf);
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITC::RegisteredAORsL
+// -----------------------------------------------------------------------------
+//
+void CSIPProfileITC::RegisteredAORsL(CSIPConcreteProfile& aProfile)
+	{
+	TSIPProfileSlots ids;
+	ids.iProfileId = aProfile.Id();
+
+	iHelper.SendL(ids,ESipProfileItcOpRegisteredAORsSize);
+	TUint size = ids.iSlot1;
+	if (size != 0)
+		{
+		HBufC8* buf = HBufC8::NewLC(size);
+		TPtr8 bufPtr = buf->Des();
+		iITCMsgArgs.Set(ESipProfileItcArgProfileId, aProfile.Id());
+		iITCMsgArgs.Set(ESipProfileItcArgAORs, &bufPtr);
+		iHelper.SendL(iITCMsgArgs,ESipProfileItcOpRegisteredAORs);
+
+		CBufFlat* internalizeBuf = CBufFlat::NewL(KBufInitSize);
+		CleanupStack::PushL(internalizeBuf);
+		internalizeBuf->InsertL(0, *buf);
+
+		RBufReadStream readStream(*internalizeBuf,0);
+		readStream.PushL();
+		aProfile.InternalizeRegisteredAORsL(readStream);
+		readStream.Pop();
+		readStream.Close();
+		CleanupStack::PopAndDestroy(internalizeBuf);
+		CleanupStack::PopAndDestroy(buf);
+		}
+	else
+		{
+		CDesC8ArrayFlat* tmp = new (ELeave) CDesC8ArrayFlat(1);
+		CleanupStack::PushL(tmp);
+		aProfile.SetRegisteredAORsL(*tmp);
+		CleanupStack::PopAndDestroy(tmp);
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfileITC::AllowMigrationL
+// -----------------------------------------------------------------------------
+//
+void CSIPProfileITC::AllowMigrationL(TUint32 aProfileId, TUint32 aIapId) 
+	{
+	TSIPProfileSlots ids;
+	ids.iProfileId = aProfileId;
+	ids.iSlot1 = aIapId;
+	iHelper.SendL(ids,ESipProfileItcOpAllowMigration);
+	}
+	
+// -----------------------------------------------------------------------------
+// CSIPProfileITC::DisallowMigrationL
+// -----------------------------------------------------------------------------
+//
+void CSIPProfileITC::DisallowMigrationL(TUint32 aProfileId, TUint32 aIapId) 
+	{
+	TSIPProfileSlots ids;
+	ids.iProfileId = aProfileId;
+	ids.iSlot1 = aIapId;
+	iHelper.SendL(ids,ESipProfileItcOpDisallowMigration);
+	}
+	
+// -----------------------------------------------------------------------------
+// CSIPProfileITC::AddALRObserverL
+// -----------------------------------------------------------------------------
+//
+void CSIPProfileITC::AddALRObserverL() 
+	{
+	TSIPProfileSlots ids; // We won't need this at server side.
+	iHelper.SendL(ids,ESipProfileItcOpAddALRObserver);
+	}
+	
+// -----------------------------------------------------------------------------
+// CSIPProfileITC::RemoveALRObserver
+// -----------------------------------------------------------------------------
+//
+void CSIPProfileITC::RemoveALRObserver()
+	{
+	TSIPProfileSlots ids; // We won't need this at server side.
+	iHelper.Send(ids,ESipProfileItcOpRemoveALRObserver);
+	}
+	
+// -----------------------------------------------------------------------------
+// CSIPProfileITC::RefreshIapAvailabilityL
+// -----------------------------------------------------------------------------
+//
+void CSIPProfileITC::RefreshIapAvailabilityL(TUint32 aProfileId)
+	{
+	TSIPProfileSlots ids; 
+	ids.iProfileId = aProfileId;
+	iHelper.SendL(ids,ESipProfileItcOpRefreshIapAvailability);
+	}
+
+