diff -r 000000000000 -r dfb7c4ff071f datacommsserver/esockserver/ssock/ss_nodeinterfaces.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/datacommsserver/esockserver/ssock/ss_nodeinterfaces.cpp Thu Dec 17 09:22:25 2009 +0200 @@ -0,0 +1,152 @@ +// Copyright (c) 2006-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: +// + +/** + @file SS_NODEINTERFACES.CPP +*/ + +#include +#include +#include +#include +#include +#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_ESockSSocksndntr, "ESockSSocksndntr"); +#endif + +using namespace ESock; +using namespace Messages; +using namespace MeshMachine; + +EXPORT_C void TCFItfExt::ForwardMessageL(const TRuntimeCtxId& aSender, + TSignalBase& aMessage, + Messages::ANode& aNode, + const TClientType& aClientType, + const TClientType& aClientTypeExclude) + { + NetInterfaces::TInterfaceControl* ic = NULL; + ic = aNode.FetchNodeInterfaceControlL(AMMNodeBase::KInterfaceId); + MeshMachine::AMMNodeBase* nodeBase = reinterpret_cast(ic->FetchInterfaceL(AMMNodeBase::KInterfaceId)); + + RNodeInterface* recp; + if(aClientType.Type() == TCFClientType::ECtrl) + { + recp = nodeBase->GetFirstClient(TClientType(TCFClientType::EServProvider),aClientTypeExclude); + } + else + { + recp = nodeBase->GetFirstClient(TClientType(TCFClientType::ECtrlProvider),aClientTypeExclude); + } + + if(recp) + { + recp->PostMessage(aSender, aMessage); + } + else + { + User::Leave(KErrNotFound); + } + } + + +EXPORT_C TAny* TCFItfExt::FetchInterfaceL(Messages::ANode& aNode, TInt aInterface) + { + NetInterfaces::TInterfaceControl* ic = NULL; + ic = aNode.FetchNodeInterfaceControlL(aInterface); + + return ic->FetchInterfaceL(aInterface); + } + + +EXPORT_C TAny* TCFItfExt::FetchInterfaceOrForwardMsgL(const TRuntimeCtxId& aSender, + TSignalBase& aMessage, + Messages::ANode& aNode, + TInt aInterface, + const TClientType& aClientType, + const TClientType& aClientTypeExclude) + { + TAny* itf = NULL; + TRAPD(ret, itf = FetchInterfaceL(aNode, aInterface)); + + switch(ret) + { + case KErrNone: + return itf; + + case KErrInterfaceNotSupported: + ForwardMessageL(aSender, aMessage, aNode, aClientType, aClientTypeExclude); + break; + + default: + __ASSERT_DEBUG(EFalse, User::Panic(KSpecAssert_ESockSSocksndntr, 1)); //unreachable + User::Leave(ret); + break; + } + + //Never gets here + return NULL; + } + + +EXPORT_C NetInterfaces::TInterfaceControl* TCFItfExt::FetchInterfaceControlOrForwardMsgL(const TRuntimeCtxId& aSender, + TSignalBase& aMessage, + Messages::ANode& aNode, + TInt aInterface, + const TClientType& aClientType, + const TClientType& aClientTypeExclude) + { + NetInterfaces::TInterfaceControl* ic = NULL; + TRAPD(ret, ic = aNode.FetchNodeInterfaceControlL(aInterface)); + + switch(ret) + { + case KErrNone: + return ic; + + case KErrInterfaceNotSupported: + ForwardMessageL(aSender, aMessage, aNode, aClientType, aClientTypeExclude); + break; + + default: + User::Leave(ret); + __ASSERT_DEBUG(EFalse, User::Panic(KSpecAssert_ESockSSocksndntr, 2)); //unreachable + break; + } + + //Never gets here + return NULL; + } + +EXPORT_C void TCFSigRMessage2Ext::Error(const TRuntimeCtxId& /*aSender*/, const TRuntimeCtxId& /*aRecipient*/, TInt aError) + { + LOG( ESockLog::Printf(KESockDCMsgs, _L8( "TCFSigRMessage2Ext:\tError(): completing message (%08X) with %d" ), + iMessage.Handle(), aError) ); + + if ( !iMessage.IsNull() ) + { + iMessage.Complete(aError); + } + } + +EXPORT_START_ATTRIBUTE_TABLE_AND_FN( TCFSigRMessage2Ext, 0, 0 ) //has to be derived from + REGISTER_ATTRIBUTE( TCFSigRMessage2Ext, iMessage, TMeta ) +END_ATTRIBUTE_TABLE_BASE(TSignalBase, 0) + +