plugins/consoles/common/consoleextensions.h
author Tom Sutcliffe <thomas.sutcliffe@accenture.com>
Sun, 17 Oct 2010 18:43:12 +0100
changeset 86 849a0b46c767
parent 30 35cb3fe43f60
child 100 706c7a69e448
permissions -rw-r--r--
Fixed lots of issues with installing a low-caps version of fshell from SIS file. * Fixed issue in CCommandFactory whereby some APIs like GetCommandInfoL could trigger allocations on the wrong heap or signals to the wrong thread. The symptoms were often seen as a crash in the which_00 thread when running ciftest. * Lots of build fixes for when FSHELL_PROTECTED_UIDS isn't defined and when all capabilities aren't available. * Added new platform.mmh macro FSHELL_OPEN_SIGNED. * Open signing of fshell SIS files is now supported for production S60 handsets. Build fshell with the FSHELL_OPEN_SIGNED macro defined (and without defining FSHELL_CAP_ALL or FSHELL_PROTECTED_UIDS) in your platform.mmh and submit \epoc32\fshell\fshell.unsigned.sis to https://www.symbiansigned.com/app/page/public/openSignedOnline.do . The following commands are not available when using Open Signing due to Platform Security restrictions: fdb; kerninfo; chunkinfo; svrinfo; objinfo; sudo; fsck; localdrive; ramdefrag; readmem; reboot; setcritical; setpriority. Others such as chkdeps, e32header, ps, and fshell itself will run but in a restricted capacity (for example, fshell will no longer allow you to modify files in the \sys\bin directory). * Removed commands objinfo, svrinfo, chunkinfo, readmem, fsck completely when memory access isn't present - previously they would still appear in the help but would give an error if you tried to run them.

// consoleextensions.h
// 
// Copyright (c) 2008 - 2010 Accenture. All rights reserved.
// This component and the accompanying materials are made available
// under the terms of the "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:
// Accenture - Initial contribution
//

#ifndef __CONSOLEEXTENSIONS_H__
#define __CONSOLEEXTENSIONS_H__

#include <e32base.h>

class ConsoleMode
	{
public:
	enum TMode
		{
		EBinary,
		EText,
		};
	static const TUint KSetConsoleModeExtension = 0x10285e15;
public:
	/**
	A console implementation that does not support different mode or a CBase derived class
	that does not derive from CConsoleBase will return KErrExtensionNotSupported if passed
	into this function.
	*/
	static inline TInt Set(CBase* aConsole, TMode aMode);
	};

class UnderlyingConsole
	{
public:
	static const TUint KSetUnderlyingConsoleExtension = 0x10287199;
public:
	/**
	Set the underlying console of another console. The underlying console may be used during construction
	of the actual console to display information or error messages, such as the IP address to connect to
	in the case of a TCP console implementation.
	
	Note, for consoles loaded within the IO server, the underlying console is write only. Attempting to
	read from it will cause a panic.
	*/
	static inline TInt Set(CBase* aConsole, CConsoleBase* aUnderlyingConsole);
	};

class ConsoleAttributes
	{
public:
	// Note these are also defined in win32cons.h
	enum TAttribute
		{
		ENone			= 0x0001,
		EBold			= 0x0002,
		EUnderscore		= 0x0004,
		EBlink			= 0x0008,
		EInverse		= 0x0010,
		EConceal		= 0x0020
		};
	enum TColor
		{
		EBlack,
		ERed,
		EGreen,
		EYellow,
		EBlue,
		EMagenta,
		ECyan,
		EWhite,
		EReset,
		EUnchanged
		};
	class TAttributes
		{
	public:
		inline TAttributes(TUint aAttributes, TColor aForegroundColor = EUnchanged, TColor aBackgroundColor = EUnchanged);
	public:
		TUint iAttributes;
		TColor iForegroundColor;
		TColor iBackgroundColor;
		};
	static const TUint KSetConsoleAttributesExtension = 0x10286B6E;
public:
	/**
	A console implementation that does not support different mode or a CBase derived class
	that does not derive from CConsoleBase will return KErrExtensionNotSupported if passed
	into this function.
	*/
	static inline TInt Set(CBase* aConsole, const TAttributes& aAttributes);
	};
	
class LazyConsole
	{
public:
	static const TUint KLazyConsoleExtension = 0x1028719e;
public:
	/**
	Returns true if the console is lazy.
	*/
	static inline TBool IsLazy(CBase* aConsole);
	/**
	Returns true if he console is lazy, AND it's been constructed.
	*/
	static inline TBool IsConstructed(CBase* aConsole);
	};

class ConsoleStdErr
	{
public:
	static const TInt KWriteStdErrConsoleExtension = 0x10286aaa;
public:
	/**
	Write to StdErr of the underlying console if the console supports this.
	*/
	static inline TInt Write(CBase* aConsole, const TDesC& aDes);
	};

// BC on this interface is not guaranteed - only for use by things inside /fshell/plugins/consoles
class MIosrvConsoleHelper
	{
protected:
	enum TVerbosity
		{
		EInformation,
		EError,
		EDebug,
		};
	IMPORT_C void Message(TVerbosity aVerbosity, TRefByValue<const TDesC> aFmt, ...);
	IMPORT_C TBool Debug() const;
	IMPORT_C void SetDebug(TBool aDebug);
	IMPORT_C void HandleConsoleCreationError(const TDesC& aConsoleName, TInt aError);
	IMPORT_C void CleanupUnderlyingConsole();
	IMPORT_C CConsoleBase* UnderlyingConsole() const;

	IMPORT_C TInt MIosrvConsoleHelper_Extension(TUint aExtensionId, TAny*& a0, TAny* a1);
	
	IMPORT_C virtual TInt WriteStdErr(const TDesC& aDes); // Default returns KErrExtensionNotSupported
	
private:
	TBool iDebug;
	CConsoleBase* iUnderlyingConsole;
	};

#include <fshell/consoleextensions.inl>
	
#endif //__CONSOLEEXTENSIONS_H__