diff -r 000000000000 -r b16258d2340f applayerprotocols/ftpengine/inc/PICHNL.H --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/applayerprotocols/ftpengine/inc/PICHNL.H Tue Feb 02 01:09:52 2010 +0200 @@ -0,0 +1,165 @@ +/** +* Copyright (c) 1998-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: +* FTP protocol engine +* Author: Philippe Gabriel +* Implements objet controling the PI channel of the FTP protocol +* Model the PI Channel as an FSM +* Implements objet controling the PI channel of the FTP protocol +* Model the PI Channel as an FSM +* The FSM has 7 states: +* Idle, Connecting, Disconnecting, Connected, Sending, Parsing +* ParsingSending +* Transitions between states are triggered by PI methods and events +* coming from ESOCK +* +* +*/ + + + +/** + @file PICHNL.CPP + @internalComponent +*/ + +#if !defined(__PICHNL_H__) +#define __PICHNL_H__ +#include "DEBUG.H" +#include "FTPDEF.H" +#include +#include + +////////////////////////////////////////////////////////////// +// Definitions +////////////////////////////////////////////////////////////// +class CFtpProtocol; +class MPIChannelNotifier +/** +@internalComponent +*/ + { +public: +/** +Operation completion return codes. +*/ + enum TPiOperationCompletion + { + EPiConnectComplete=0, + EPiDisconnectComplete, + EPiSendComplete, + EPiOpCancelComplete + }; +/** +Error status +*/ + enum TPiOperationError + { + EPiConnectFailed=0, + EPiConnectionReset, + EPiDisconnectFailed, + EPiSendFailed, + EPiCancelFailed + }; +public: + /** Notify of normal completion of an operation */ + virtual void PIChannelOperationCompletion(const TPiOperationCompletion)=0; + /** Notify of error performing an operation */ + virtual void PIChannelOperationError(const TPiOperationError)=0; + /** Notify of reception */ + virtual void PIChannelRcvNotification(void)=0; + }; + +class CPIChannel; + +NONSHARABLE_CLASS(CPISocketRead) : public CActive +/** +Active object waiting for incoming data +@internalComponent +*/ + { +public: + static CPISocketRead* NewL(MPIChannelNotifier* aNotifier, + CPIChannel* aPIChannel); + void ConstructL(); + /** CActive */ + void DoCancel(); + /** CActive */ + void RunL(); + void IssueRead(TDes8& aBuffer); + void SetSocket(RSocket* aSocket){iSocket = aSocket;} + +protected: + CPISocketRead(MPIChannelNotifier*,CPIChannel*); + +private: + RSocket* iSocket; + MPIChannelNotifier* iNotifier; + TSockXfrLength iRcvLen; + CPIChannel* iPIChannel; + }; + + +NONSHARABLE_CLASS(CPIChannel) : public CActive +/** +PI Channel +@internalComponent +*/ + { +friend class CPISocketRead; +public: + + CPIChannel(MPIChannelNotifier*); + ~CPIChannel(); + static CPIChannel* NewL(MPIChannelNotifier*,RSocketServ&); + /** Command interface */ + /** Connect PI socket */ + TBool Connect(TSockAddr& aNetAddr); + void GetLocalAddress(TInetAddr& aLocalAddr); + /** Disconnect PI socket */ + void Disconnect(void); + /** Returns state of DTP Channel */ + TBool Busy(void); + /** Send a command on the PI Channel */ + void SendCommand(TDes8& aCommand,TUint aSomeFlags=0,TBool aSendCRLF=TRUE); + /** Fetch the reply sent by the server */ + void GetNextAnswer(TDes8& aBuffer); +protected: + void RunL(); + void DoCancel(void); +private: + enum TState + { + EPIChannelIdle,EPIChannelConnecting,EPIChannelDisconnecting, + EPIChannelConnected,EPIChannelSending + }; + enum TPanic + { + EPIPanicChannelConnected = -1, + EPIPanicOutOfState = -2, + EPIPanicChannelNotConnected = -3 + }; + void ConstructL(RSocketServ& aSockServ); + /** The state of the FSM */ + TState iPIChannelState; + /** A socket server to be used for all socket operations */ + RSocketServ iSockServ; + RSocket iPiSocket; + /** Last code sent by the FTP server */ + TUint32 iPIServerCode; + /** Active object receiving data */ + CPISocketRead *iReceiver; + MPIChannelNotifier* iNotifier; + }; +#endif // __PICHNL_H__