diff -r 000000000000 -r af10295192d8 networkprotocols/iphook/inhook6example/src/exaout.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/networkprotocols/iphook/inhook6example/src/exaout.cpp Tue Jan 26 15:23:49 2010 +0200 @@ -0,0 +1,140 @@ +// Copyright (c) 2004-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: +// exaout.cpp - Outbound plugin example module +// + +#include "exaout.h" + +CExaoutFlowInfo::CExaoutFlowInfo( CFlowContext &aFlow) : iFlow(aFlow) + /** + * Constructor. + * + * @param aFlow The flow context. + */ + { + } + +CExaoutFlowInfo::~CExaoutFlowInfo() + /** + * Destructor. + * + * The #iMgr value indicates whether object is still linked + * or not (because, depending on how CProtocolExaout::NetworkDetached() + * or destructor has been implemented, this could be a floating flow, + * which is not attached to the protocol any more). + * + * However, if this is still attached, then must detach the the flow + * from the protocol instance. + */ + { +/** @code */ + if (iMgr) + { + iMgr = NULL; + iDLink.Deque(); + } +/** @endcode */ + } + + +MFlowHook *CProtocolExaout::OpenL(TPacketHead& /*aHead*/, CFlowContext* aFlow) + /** + * A new flow is opening. + * + * This example attaches to every flow. + * + * @param aFlow The flow context. + */ + { + CExaoutFlowInfo* info = new (ELeave) CExaoutFlowInfo(*aFlow); + iFlowList.AddLast(*info); // Save the flow info for later use + info->iMgr = this; // info is now linked! + return info; + } + +TInt CExaoutFlowInfo::ReadyL(TPacketHead& /*aHead*/) + /** + * A flow has been connect to interface. + * + * This is called when the flow has been connected to the interface, + * source address has been selected. + * + * The example does not have any reason to block the connection + * process, and thus always returns READY. + * + * @return EFlow_READY always. + */ + { +/** code */ + return EFlow_READY; +/** @endcode */ + } + +// +// Applies all the remaining modifications needed for every outgoing packet +// +TInt CExaoutFlowInfo::ApplyL(RMBufSendPacket& /*aPacket*/, RMBufSendInfo& /*aInfo*/) + /** + * A outbound packet is being sent to the flow. + * + * The example is dummy, and does do anything with the packet, + * return always KErrNone (= packet processed). For some example, + * see MFlowHook::ApplyL example. + * + * @return KErrNone + */ + { +/** @code */ + // + // This would contain any packet processing code. + // + return KErrNone; +/** @endcode */ + } + +void CExaoutFlowInfo::Close() + /** + * The reference counting, one less. + * + * The MFlowHook objects must implement reference counting semantics + * and they must automaticly self-destruct after the last reference + * is removed. + * + * A object returned by OpenL counts as one reference. As each + * flow gets own object, the initial value after CBase construction + * is 0. This is not touched, and thus, the object is deleted when + * the count goes negative. + */ + { +/** @code */ + if (--iRefs < 0) + { + delete this; + } +/** @endcode */ + } + +void CExaoutFlowInfo::Open() + /** + * The reference counting, one more. + * + * The MFlowHook objects must implement reference counting semantics + * and they must automaticly self-destruct after the last reference + * is removed. + */ + { +/** @code */ + iRefs++; +/** @endcode */ + }