// // Copyright (C) 2001 Microsoft Corp // // FtpControl.cpp // // Sanjiv // JPDup // #pragma once class CFtpControlConnection; //#include "PreComp.h" // Theis FtpControl.h file get included by MyAlg.h that is used in the ALG.exe build // so we can't use this precompile file #include "buffer.h" #include "list.h" #define FTP_MAX_MSG_SIZE 1024 typedef enum _READ_TYPE { CLIENT_READ = 0x1, SERVER_READ = 0x2 } READ_TYPE; typedef enum _CONNECTION_TYPE { INCOMING = 0x1, OUTGOING = 0x2 }CONNECTION_TYPE; extern CControlObjectList g_ControlObjectList; #define ERROR_IO_CANCELLED 0xC0000120 #define DATA_CREATION_TIMEO 1000 #define ADD_STR_SIZE 23 class CControlState { public: ULONG m_nAddressNew; ULONG m_nAddressOld; USHORT m_nPortNew; USHORT m_nPortOld; UCHAR m_szAddressPortNew[ADD_STR_SIZE]; ULONG m_nAddressLenNew; }; // // // Main class that controls the FTP // // class CFtpControlConnection { public: // Constructor(s) CFtpControlConnection(); // Destruction ~CFtpControlConnection(); // // Properties // SOCKET m_ClientConnectedSocket; SOCKET m_AlgConnectedSocket; USHORT m_nSourcePortReplacement; private: IPendingProxyConnection* m_pPendingProxy; CONNECTION_TYPE m_ConnectionType; CControlState m_ControlState; volatile LONG m_RefCount; CDataChannelList m_DataChannelList; // // Methods // private: // void ProcessFtpMessage( UCHAR* Buffer, ULONG* pBytes ); // HRESULT CreateNewAddress(void); // HRESULT SetupDataRedirect(void); public: // ULONG IncReference(); // ULONG DecReference(); // void Shutdown(); // HRESULT Init( SOCKET AcceptedSocket, ULONG ToAddr, USHORT ToPort, CONNECTION_TYPE ConnType ); // void DataChannelDeletion( BOOLEAN TimerOrWait, PVOID Context ); // void DataChannelCreation( BOOLEAN TimerOrWait, PVOID Context ); // void ConnectCompletionRoutine( ULONG ErrCode, ULONG BytesTransferred ); // void ReadCompletionRoutine( ULONG ErrCode, ULONG BytesTransferred, PNH_BUFFER Bufferp ); // void WriteCompletionRoutine( ULONG ErrCode, ULONG BytesTransferred, PNH_BUFFER Bufferp ); }; void DataChannelCreationCallback( BOOLEAN TimerOrWait,PVOID Context,PVOID Context2 ); void DataChannelDeletionCallback( BOOLEAN TimerOrWait,PVOID Context,PVOID Context2 ); void MyAcceptCompletion( ULONG ErrCode, ULONG BytesTransferred, PNH_BUFFER Bufferp); void MyConnectCompletion(ULONG ErrCode, ULONG BytesTransferred, PNH_BUFFER Bufferp); void MyReadCompletion(ULONG ErrCode, ULONG BytesTransferred, PNH_BUFFER Bufferp); void MyWriteCompletion(ULONG ErrCode, ULONG BytesTransferred, PNH_BUFFER Bufferp);