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.
// tcpcsy.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 __TCPCSY_H__
#define __TCPCSY_H__
#include <cs_port.h>
#include "config.h"
#include "reader.h"
#include "writer.h"
#include "connector.h"
#include "listener.h"
#include "tcpcsylog.h"
//
// Constants.
//
_LIT(KCsyName, "tcpcsy");
//
// Forward declarations.
//
class CTcpPort;
//
// Class Definitions.
//
class CTcpPortFactory : public CSerial
{
public:
static CTcpPortFactory* NewL();
~CTcpPortFactory();
private: // From CSerial.
virtual CPort * NewPortL(const TUint aUnit);
virtual void Info(TSerialInfo &aSerialInfo);
virtual TSecurityPolicy PortPlatSecCapability(TUint aPort) const;
private:
CTcpPortFactory();
void ConstructL();
private:
RSocketServ iSocketServ;
CConfig* iConfig;
TDblQue<CTcpPort> iPorts;
public:
#ifdef __FLOG_ACTIVE
#ifdef LOG_CSY_EVENTS
RFileLogger iEventLogger;
#endif // LOG_CSY_EVENTS
#ifdef LOG_CSY_TX
RFileLogger iTxLogger;
#endif // LOG_CSY_TX
#ifdef LOG_CSY_RX
RFileLogger iRxLogger;
#endif // LOG_CSY_RX
#endif // __FLOG_ACTIVE
};
class CTcpPort : public CPort, public MConnectorObserver, public MListenerObserver, public MReaderObserver, public MWriterObserver
{
public:
static TInt LinkOffset();
static CTcpPort* NewLC(CTcpPortFactory& aFactory, CConfig::TMode aMode, TUint aProtocolFamily, TUint aProtocol, const TInetAddr& aAddress, RSocketServ& aSocketServ);
public: // From CPort.
virtual void StartRead(const TAny* aClientBuffer, TInt aLength);
virtual void ReadCancel();
virtual TInt QueryReceiveBuffer(TInt& aLength) const;
virtual void ResetBuffers(TUint aFlags);
virtual void StartWrite(const TAny* aClientBuffer, TInt aLength);
virtual void WriteCancel();
virtual void Break(TInt aTime);
virtual void BreakCancel();
virtual TInt GetConfig(TDes8& aDes) const;
virtual TInt SetConfig(const TDesC8& aDes);
virtual TInt SetServerConfig(const TDesC8& aDes);
virtual TInt GetServerConfig(TDes8& aDes);
virtual TInt GetCaps(TDes8& aDes);
virtual TInt GetSignals(TUint& aSignals);
virtual TInt SetSignalsToMark(TUint aSignals);
virtual TInt SetSignalsToSpace(TUint aSignals);
virtual TInt GetReceiveBufferLength(TInt& aLength) const;
virtual TInt SetReceiveBufferLength(TInt aSignals);
virtual void Destruct();
virtual void FreeMemory();
virtual void NotifySignalChange(TUint aSignalMask);
virtual void NotifySignalChangeCancel();
virtual void NotifyConfigChange();
virtual void NotifyConfigChangeCancel();
virtual void NotifyFlowControlChange();
virtual void NotifyFlowControlChangeCancel();
virtual void NotifyBreak();
virtual void NotifyBreakCancel();
virtual void NotifyDataAvailable();
virtual void NotifyDataAvailableCancel();
virtual void NotifyOutputEmpty();
virtual void NotifyOutputEmptyCancel();
virtual TInt GetFlowControlStatus(TFlowControl& aFlowControl);
virtual TInt GetRole(TCommRole& aRole);
virtual TInt SetRole(TCommRole aRole);
public: // From MConnectorObserver.
virtual void ConnectionComplete(TInt aError);
public: // From MListenerObserver.
virtual void ListenComplete(TInt aError);
public: // From MReaderObserver.
virtual void ReadComplete(const TDesC8& aData);
virtual void ReadError(TInt aError);
public: // From MWriterObserver.
virtual void WriteComplete(TInt aError);
private:
virtual ~CTcpPort();
CTcpPort(CTcpPortFactory& aFactory);
void ConstructL(CConfig::TMode aMode, TUint aProtocolFamily, TUint aProtocol, const TInetAddr& aAddress, RSocketServ& aSocketServ);
private:
TDblQueLink iLink;
CTcpPortFactory& iFactory;
RSocket iSocket;
TBool iSocketConnected;
CConnector* iConnector;
CListener* iListener;
CReader* iReader;
CWriter* iWriter;
RBuf8 iWriteBuf;
TInt iError;
TInetAddr iInetAddr;
TCommRole iRole;
};
#endif // __TCPCSY_H__