mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
210 lines
3.5 KiB
210 lines
3.5 KiB
//
|
|
// 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);
|