--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerprotocols/httptransportfw/Test/t_httptransporthandler/cdriverbase.h Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,172 @@
+// Copyright (c) 2002-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:
+//
+
+#ifndef __CDRIVERBASE_H__
+#define __CDRIVERBASE_H__
+
+#include <e32base.h>
+
+#include "mdriverobserver.h"
+
+/** @class CDriverBase
+ The CDriverBase is an abstract class that provides command running
+ functionality. There are two types of commands - 'Do' and 'Expect' commands.
+
+ A 'Do' command implies that the concrete driver must perform an action. The
+ concrete class is notified of the action via its override of the RunCmdL()
+ function.
+
+ Once the 'Do' command has been performed, the next command is extracted from
+ the command stack. If it is another 'Do' command, then the driver base self-
+ completes and the RunCmdL() function is called again. For an 'Expect' command
+ the driver base waits until the concrete class it invoked.
+
+ When a concrete class is invoked on one of its APIs it can check to see if
+ that invocation was expected by asking this base class, passing the the
+ command ID of the invoked function in the ExpecetedCmd() API.
+
+ If the invoked command was expected, the next command is extracted from the
+ command stack as described earlier.
+
+ A derived class must form the command stack using the AppendDoCmdL() and the
+ AppendExpectCmdL() APIs. The commands should be appended in running order.
+ @componentInternal
+*/
+class CDriverBase : public CActive,
+ public MDriverObserver
+ {
+private: // helper class
+
+/** @class TCmdEntry
+ The TCmdEntry class is a helper class for CDriverBase. It encapsulates a
+ command ID and its type.
+ @componentInternal
+*/
+ class TCmdEntry
+ {
+ public: // enums
+
+/** @enum TCmdType
+ An enumeration defining the types of commands.
+*/
+ enum TCmdType
+ {
+ /** A 'Do' type command. This type of command implies that the driver
+ object must perform an action.
+ */
+ EDoCmd =0,
+ /** An 'Expect' type command. This type of command implies that the
+ driver expects an invocation on its API.
+ */
+ EExpectCmd
+ };
+
+ public: // methods
+
+ inline TCmdEntry();
+
+ inline TCmdEntry(TInt aCmd, TCmdType aType);
+
+ public: // attributes
+
+ TInt iCmd;
+
+ TCmdType iType;
+
+ };
+
+public: // methods
+
+ virtual ~CDriverBase();
+
+ void Start();
+
+private: // methods from CActive
+
+ virtual void RunL();
+
+ virtual void DoCancel();
+
+ virtual TInt RunError(TInt aError);
+
+private: // methods from MDriverObserver
+
+ virtual void NotifyError(TInt aError);
+
+ virtual void NotifyStart();
+
+ virtual void NotifyComplete();
+
+ virtual void Log(const TDesC& aComment);
+
+protected: // methods
+
+ CDriverBase(MDriverObserver& aObserver);
+
+ TBool TestExpectedCmd(TInt aCmd, TInt aError);
+
+ void AppendExpectCmdL(TInt aCmd);
+
+ void AppendDoCmdL(TInt aCmd);
+
+ void DoLog(const TDesC& aComment);
+
+private: // methods
+
+/** @fn RunCmdL(TInt aCmd) =0
+ Requests the command with ID aCmd is run.
+ @componentInternal
+ @param aCmd The ID of the command to run.
+*/
+ virtual void RunCmdL(TInt aCmd) =0;
+
+private: // methods
+
+ void CompleteSelf();
+
+ void NextCmd();
+
+private: // attributes
+
+ MDriverObserver& iObserver;
+
+ TInt iCurrentCmd;
+
+ RArray<TCmdEntry> iCmdStack;
+
+ TInt iNextCmd;
+
+ };
+
+inline CDriverBase::TCmdEntry::TCmdEntry()
+/**
+ Default constructor. Object not initialised.
+ @componentInternal
+*/
+ {
+ }
+
+inline CDriverBase::TCmdEntry::TCmdEntry(TInt aCmd, TCmdType aType)
+: iCmd(aCmd), iType(aType)
+/**
+ Default constructor. Object is initialised.
+ @componentInternal
+ @param aCmd The command ID.
+ @param aType The command type.
+*/
+ {
+ }
+
+#endif // __CDRIVERBASE_H__