diff -r 000000000000 -r dfb7c4ff071f datacommsserver/esockserver/ssock/ss_transporthook.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/datacommsserver/esockserver/ssock/ss_transporthook.cpp Thu Dec 17 09:22:25 2009 +0200 @@ -0,0 +1,129 @@ +// Copyright (c) 2005-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_transporthook.CPP +*/ + +#include "ss_transporthook.h" +#include +#include +#include +#include +#include + + +using namespace ESock; +using namespace Meta; +using namespace CommsFW; +using namespace Messages; + + +//TODO[PROD] - reimplement hooks? +#if 0 + +#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_ESockSSockstrnsp, "ESockSSockstrnsp"); +#endif + +//class TCFRegisterMessageHook : public TCFRegisterHookSignal +EXPORT_C TCFRegisterMessageHook::TCFRegisterMessageHook(const TNodeId& aSenderId, TUint aActivityId, const TNodeSignal::TMessageId& aMessageId): + TCFRegisterHookSignal( Messages::TSignatureBase::TypeId() ), + iMessageId(aMessageId), + iActivityId(aActivityId) + { + SetClientId(aSenderId()); + } + +EXPORT_C CCFHookEntry* TCFRegisterMessageHook::NewHookEntryL() const + { + return new(ELeave)CCFMessageHookEntry(iMessageId,iActivityId,TNodeId(iNode),TNodeId(ClientId())); + } + +EXPORT_C void TCFRegisterMessageHook::Error(TAny* aItf, TInt aError) + { + Messages::ANode* itf = static_cast(aItf); + TNodeId itfid = itf ? itf->NodeId() : TNodeId::NullCommsId(); + TCFMessage::TRegisterHookError(itfid,iActivityId,iMessageId,aError).PostTo(TNodeId(ClientId())); + } + +//class TCFDeregisterMessageHook : public TCFDeregisterHookSignal +EXPORT_C TCFDeregisterMessageHook::TCFDeregisterMessageHook(const TNodeId& aSenderId, const TNodeSignal::TMessageId& aMessageId): + TCFDeregisterHookSignal(Messages::TSignatureBase::TypeId()), + iMessageId(aMessageId) + { + SetClientId(aSenderId()); + } + +//class TTransportHookError : public Messages::TSignatureBase +TInt TTransportHookError::VerifyDestination(const CommsFW::TCookie& aDestination, CommsFW::MTransportReceiver& aTransport) + { + //deregister local tag if any + TCFDeregisterMessageHook dereg(static_cast(TNodeId(aDestination)),iHookedMessageId); + dereg.DeregisterLocalTag(aTransport); + return Messages::TSignatureBase::VerifyDestination(aDestination, aTransport); + } + +//class CCFMessageHooks : public CCFTransportHooks +void CCFMessageHooks::WalkHooks( const TCFSignalBase& aMessage, const TCookie& aRecipient ) + {//place to optimise wlak before calling the base class + CCFTransportHooks::WalkHooks( aMessage, aRecipient ); + } + +void CCFMessageHooks::RegisterL( const CommsFW::TCFRegisterHookSignal& aMessage ) + {//place to do some extra stuff for look-up optimisation + CCFTransportHooks::RegisterL( aMessage ); + } + +void CCFMessageHooks::Deregister( const CommsFW::TCFDeregisterHookSignal& aMessage ) + {//place to undo some extra stuff done for look-up optimisation + CCFTransportHooks::Deregister( aMessage ); + } + +//class CCFMessageHookEntry : public CCFHookEntry +EXPORT_C CCFMessageHookEntry::CCFMessageHookEntry( const TNodeSignal::TMessageId& aMessageId, TInt aActivityId, const TNodeId& aNode, const TNodeId& aListener ) : + CCFHookEntry(Messages::TSignatureBase::TypeId(),aNode(),aListener()), + iMessageId(aMessageId), + iActivityId(aActivityId) + { + LOG(ESockLog::Printf(KESockMessageHook, _L("CCFMessageHookEntry [this=%08x]:\t Registered [aMessagedId=%d] [aActivityId=%d] [aNode=%08x] [aListener=%08x]"), + this, aMessageId.MessageId(), aActivityId, aNode.Printable(), aListener.Printable())); + } + +EXPORT_C TBool CCFMessageHookEntry::Match(const CommsFW::TCFSignalBase& aMessage, const TCookie& aRecipient) + { + return CCFHookEntry::Match( aMessage, aRecipient ) && static_cast(aMessage).MessageId() == iMessageId; + } + +EXPORT_C void CCFMessageHookEntry::Notify(const CommsFW::TCFSignalBase& aMessage) const + { + __ASSERT_DEBUG(aMessage.IsTypeOf(TNodeSignal::TypeId()), User::Panic(KSpecAssert_ESockSSockstrnsp, 1)); + TNodeSignal& sig = static_cast(const_cast(aMessage)); + TInt activityId = sig.ActivityId(); + sig.SetActivity(iActivityId); + CCFHookEntry::Notify(sig); + sig.SetActivity(activityId); + } + +EXPORT_C TBool CCFMessageHookEntry::Match( const TCFDeregisterHookSignal& aReq ) const + { + return CCFHookEntry::Match( aReq ); + } + +#endif + +