diff -r 000000000000 -r dfb7c4ff071f datacommsserver/esockserver/ssock/ss_parameterfamilybundle.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/datacommsserver/esockserver/ssock/ss_parameterfamilybundle.cpp Thu Dec 17 09:22:25 2009 +0200 @@ -0,0 +1,249 @@ +// Copyright (c) 2007-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: +// Implementation for CCFParameterFamilyBundle and RCFParameterFamilyBundle +// +// + +/** + @file + @internalTechnology +*/ + +#include "ss_parameterfamilybundle.h" +#include + + +#ifdef _DEBUG +// Panic category for "absolutely impossible!" vanilla ASSERT()-type panics from this module +// (if it could happen through user error then you should give it an explicit, documented, category + code) +_LIT(KSpecAssert_ESockSSocksprmtr, "ESockSSocksprmtr"); +#endif + + +#ifdef _DEBUG +_LIT (KBundlePanic,"BundlePanic"); +#endif + +namespace BundlePanics +{ +enum + { + KPanicNotReallyANodeYet = 1 + }; +} + +using namespace ESock; + +namespace ESock + { + + +class CCFParameterFamilyBundle : public CBase, + public RParameterFamilyBundle, + protected Messages::ASimpleNodeIdBase + { + friend class RCFParameterFamilyBundle; + friend class RCFParameterFamilyBundleC; +public: + static CCFParameterFamilyBundle* NewL() + { + CCFParameterFamilyBundle* newObj = new(ELeave)CCFParameterFamilyBundle; + CleanupStack::PushL(newObj); + static_cast(*newObj).CreateL(); + CleanupStack::Pop(); + return newObj; + } + + static CCFParameterFamilyBundle* LoadL(TDesC8& aDes) + { + CCFParameterFamilyBundle* newObj = new(ELeave)CCFParameterFamilyBundle; + CleanupStack::PushL(newObj); + static_cast(*newObj).LoadL(aDes); + CleanupStack::Pop(); + return newObj; + } + + void Open() // increase refcount.. returns new refcount + { + User::LockedInc(iRefCount); + } + + void Close() // decrease refcount or destroy + { + __ASSERT_DEBUG(iRefCount >= 0, User::Panic(KSpecAssert_ESockSSocksprmtr, 1)); + if(User::LockedDec(iRefCount) <= 1) + { + static_cast(*this).Destroy(); + delete this; + } + } + +protected: + CCFParameterFamilyBundle(): + iRefCount(0) + { + } + + virtual ~CCFParameterFamilyBundle() + { + } + + virtual void ReceivedL(const Messages::TRuntimeCtxId& aSender, const Messages::TNodeId& aRecipient, Messages::TSignatureBase& aMessage) + { + __ASSERT_DEBUG(0,User::Panic(KBundlePanic,BundlePanics::KPanicNotReallyANodeYet)); + (void)aSender; + (void)aRecipient; + (void)aMessage; + } + + + +private: + TInt iRefCount; + }; + +} // namespace ESock + +EXPORT_C void RCFParameterFamilyBundleC::Open() +/** Increases the refcount of the target family bundle. Ensure it + * stays in existence til at least after we call Close() on this instance + * of the handle. + +@param none +@return none +*/ + { + CCFParameterFamilyBundle* tBundle=TargetBundle(); + if(tBundle) + { + tBundle->Open(); + } + } + + +EXPORT_C void RCFParameterFamilyBundleC::Open(const RCFParameterFamilyBundleC& aExistingHandle) +/** Initialises this handle from an existing handle, whilst increasing the + * refcount. This ensures that the target + * stays in existence til at least after we call Close() on this instance + * of the handle. + +@param none +@return none +*/ + { + CCFParameterFamilyBundle* tBundle=TargetBundle(); + if (tBundle) + { + tBundle->Close(); + } + iBundleId = aExistingHandle.iBundleId; + tBundle=TargetBundle(); + if (tBundle) + { + tBundle->Open(); + } + } + +EXPORT_C void RCFParameterFamilyBundleC::Close() +/** Opens a new RConnection instance. + +@param aSocketServer Socket Server session. +@param aConnectionType Reserved. +@return KErrNone if successful, otherwise another of the system wide error +codes. */ + { + CCFParameterFamilyBundle* tBundle=TargetBundle(); + if(tBundle) + { + tBundle->Close(); + } + iBundleId = Messages::TNodeId::NullId(); + } + +EXPORT_C void RCFParameterFamilyBundleC::CreateL() + { + CCFParameterFamilyBundle* tBundle = CCFParameterFamilyBundle::NewL(); + iBundleId = tBundle->NodeId(); + } + +EXPORT_C void RCFParameterFamilyBundleC::LoadL(TDesC8& aDes) + { + CCFParameterFamilyBundle* tBundle = CCFParameterFamilyBundle::LoadL(aDes); + iBundleId = tBundle->NodeId(); + } + +EXPORT_C TUint RCFParameterFamilyBundleC::Length() const + { + CCFParameterFamilyBundle* tBundle=const_cast(*this).TargetBundle(); + return tBundle?tBundle->Length():0; + } + +EXPORT_C TUint RCFParameterFamilyBundleC::CountParameterSets() const + { + CCFParameterFamilyBundle* tBundle=const_cast(*this).TargetBundle(); + return tBundle?tBundle->CountParameterFamilies():0; + } +EXPORT_C TInt RCFParameterFamilyBundleC::Store(TDes8& aDes) const + { + CCFParameterFamilyBundle* tBundle=const_cast(*this).TargetBundle(); + return tBundle?tBundle->Store(aDes):KErrNotReady; + } + +EXPORT_C const RParameterFamily RCFParameterFamilyBundleC::GetFamilyAtIndex(TUint aIndex) const + { + CCFParameterFamilyBundle* tBundle=const_cast(*this).TargetBundle(); + return tBundle?tBundle->GetFamilyAtIndex(aIndex):RParameterFamily(); + } + +EXPORT_C const RParameterFamily RCFParameterFamilyBundleC::FindFamily(TUint32 aFamilyId) const + { + CCFParameterFamilyBundle* tBundle=const_cast(*this).TargetBundle(); + return tBundle?tBundle->FindFamily(aFamilyId):RParameterFamily(); + } + + +EXPORT_C CCFParameterFamilyBundle* RCFParameterFamilyBundleC::TargetBundle() + { + return (iBundleId != Messages::TNodeId::NullId() ? + static_cast(static_cast(iBundleId.Ptr())) : + NULL); + } + +EXPORT_C RParameterFamily RCFParameterFamilyBundle::CreateFamilyL(TUint32 aFamilyId) + { + return TargetBundleL().CreateFamilyL(aFamilyId); + } + +EXPORT_C RParameterFamily RCFParameterFamilyBundle::GetFamilyAtIndex(TUint aIndex) + { + CCFParameterFamilyBundle* tBundle=TargetBundle(); + return tBundle?tBundle->GetFamilyAtIndex(aIndex):RParameterFamily(); + } + +EXPORT_C RParameterFamily RCFParameterFamilyBundle::FindFamily(TUint32 aFamilyId) + { + CCFParameterFamilyBundle* tBundle=TargetBundle(); + return tBundle?tBundle->FindFamily(aFamilyId):RParameterFamily(); + } + +EXPORT_C void RCFParameterFamilyBundle::ClearAllParameters(RParameterFamily::TParameterSetType aType) + { + CCFParameterFamilyBundle* tBundle=TargetBundle(); + if(tBundle) + { + tBundle->ClearAllParameters(aType); + } + } + +