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 */
+ }