plugins/networking/tcpcsy/src/tcpcsy.h
author Tom Sutcliffe <thomas.sutcliffe@accenture.com>
Thu, 26 Aug 2010 00:49:35 +0100
changeset 45 534b01198c2d
parent 0 7f656887cf89
permissions -rw-r--r--
Added ENotifyKeypresses and ECaptureCtrlC flags to CCommandBase. Commands can now get keypresses and handle ctrl-C via callbacks instead of having to implement custom active objects. As part of this extended the CCommandBase extension interface to MCommandExtensionsV2 for the new virtual functions KeyPressed(TUint aKeyCode, TUint aModifiers) and CtrlCPressed(). sudo now cleans up correctly by using ECaptureCtrlC.

// 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__