diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/ProfileAgent/Client/Src/SIPProfileITC.cpp --- /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 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::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(*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(*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 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(*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(*buf); + CleanupStack::PopAndDestroy(buf); + + return plugins; + } + +// ----------------------------------------------------------------------------- +// CSIPProfileITC::SIPProfilesL +// ----------------------------------------------------------------------------- +// +CSIPConcreteProfileHolder* CSIPProfileITC::SIPProfilesL() + { + TSIPProfileSlots ids; + + TPckgBuf 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(*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 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(*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 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(*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); + } + +