www.pudn.com > warsrc.rar > GenericRemote.h
// This is part of the WAR SOFTWARE SERIES initiated by Jarle Aase
// Copyright 1996 by Jarle Aase. All rights reserved.
// See the "War Software Series Licende Agreement" for details concerning
// use and distribution.
// ---
// This source code, executables and programs containing source code or
// binaries or proprietetary technology from the War Software Series are
// NOT alloed used, viewed or tested by any governmental agencies in
// any countries. This includes the government, departments, police,
// military etc.
// ---
// This file is intended for use with Tab space = 2
// Created and maintained in MSVC Developer Studio
// ---
// NAME : GenericRemote.h
// PURPOSE : FTP/HTTP generic client
// PROGRAM :
// DATE : Dec 31. 1996
// AUTHOR : Jarle Aase
// ---
// REVISION HISTORY
//
////////////////////////////////////////////////////////////////////
// Client Command parser
class CCommandParser;
class CFTPParser : public CCommandParser
{
public:
CFTPParser();
};
class DLL_WAR_CLIENT_ CXmitInfo : public CObject
{
public:
DECLARE_DYNCREATE(CXmitInfo)
CXmitInfo();
~CXmitInfo();
CString m_FromPath;
CString m_ToPath; // Can be directory or filename
DWORD m_Flags;
int m_FileMode;
FLEN m_StartOfs;
FLEN m_FileLength;
__int64 m_FileDate;
};
// CXmitInfo Flags
#define XIF_RESM 0x0001
#define XIF_RECR 0x0002
#define XIF_NOMC 0x0004
#define XIF_NWOL 0x0008
#define XIF_CHOL 0x0010
#define XIF_CHNO 0x0020
#define XIF_NWNO 0x0040
#define XIF_ASCI 0x0080 // Text mode
#define XIF_BINR 0x0100 // Binary mode
#define XIF_INDEX 0x0200 // Index file
#define XIF_TEMP 0x0400 // Temporary file
class CGenericInternetView;
class DLL_WAR_CLIENT_ CXmitStack
{
public:
int m_LastCmdID;
int m_CurrCmdID;
};
class DLL_WAR_CLIENT_ CGenericRemote : public CRemoteInterface
{
public:
CGenericRemote(CGenericInternetView *pView);
~CGenericRemote();
BOOL Execute(LPCSTR Command);
static BOOL RequestCallback(int nErrorCode, LPVOID ReplyBuf, LPVOID Arg);
BOOL Request(LPCSTR Cmd);
BOOL FTPGetPutFile(int Mode, LPCSTR LocalName,LPCSTR RemoteName,
int argc = 0, char **argv = NULL);
void OnGotFileOK();
virtual void OnFileCompletion(int nErrorCode);
BOOL TryUNIXDirParse(LPSTR Listing, CLinkedList& List);
BOOL TryDOSDirParse(LPSTR Listing, CLinkedList& List);
BOOL TryNovellDirParse(LPSTR Listing, CLinkedList& List);
BOOL TryVMSDirParse(LPSTR Listing, CLinkedList& List);
void ParseDirListing(HANDLE hFile, CLinkedList& List);
void EndXmit();
void ShowInfoDlg(int MsgID = 0, HICON hIcon = NULL);
BOOL GenericXmitNextFile(BOOL IsFirst);
BOOL GenericGetFile(int argc, char **argv);
BOOL ParsePutGetArgs(int argc, char **argv, BOOL LookForDest, int Mode);
BOOL ValidateGetFile(CLinkedList& List);
void CleanUpXmitList();
BOOL GenericPutFile(int argc, char **argv);
BOOL IsIdle();
BOOL Abort();
void OnOpen(int nErrorCode);
CString GetTempName();
BOOL ReadTheFile(HANDLE hFile, CString& cBuf);
void ParseIndexListing(HANDLE hFile, CLinkedList& List);
virtual BOOL OnHandleWinsockErr(int nErrorCode );
void PushXmitState();
BOOL PopXmitState();
CGenericInternetView *m_pMyView;
CFTPParser m_Parser;
int m_LastCmdID;
CString m_MyRbuf;
HANDLE m_hCancel;
CString m_InformQueue;
int m_FileStatus;
int m_FileMode;
HANDLE m_FileHandle;
int m_FileIsTransmittedOK; // Set by FTP data sock callback
BOOL m_IsBinaryFile;
BOOL m_IsTmpFile;
CString m_LocalFileName;
CString m_RemoteFileName;
CFTPDataSock *m_FTPData;
struct sockaddr m_Sockaddr; // Used to connect to remote data socket
BOOL m_ThereWasAnError;
CLinkedList m_XmitList;
int m_CurrentXfer;
int m_XfersToGo;
int m_NumSuccessfulXfers;
int m_TotalNumOfXfers;
BOOL m_EnableAutoUpdate;
int m_CmdID;
BOOL m_IsConnectedOK;
long m_NotifyCnt;
int m_ServerType;
int m_ServerSoftware;
CString m_ServerVersion;
CString m_ListCmd;
CXmitInfo *m_CurrentFileInfo;
BOOL m_NoREST;
CString m_LastTypeCommand;
CString m_LastModeCommand;
CString m_RenameTo;
CLinkedList m_XmitStack;
__int64 m_RcvFileDate;
HANDLE CreateFile(LPCTSTR lpFileName, // pointer to name of the file
DWORD dwDesiredAccess, // access (read-write) mode
DWORD dwShareMode, // share mode
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // pointer to security descriptor
DWORD dwCreationDistribution, // how to create
DWORD dwFlagsAndAttributes, // file attributes
HANDLE hTemplateFile // handle to file with attributes to copy
);
public:
virtual BOOL OnNotification(int nErrorCode, LPSTR Notification);
virtual void OnClientLogNotify(LPCSTR Text);
void FTPLocalProcess();
virtual void OnDNSLookup(int nErrorCode, CDNSLookup *pDNS);
virtual void OnServerMessage( int nErrorCode );
virtual void OnConnect( int nErrorCode );
virtual void OnSend( int nErrorCode );
virtual void OnReceive( int nErrorCode );
virtual void OnClose( int nErrorCode );
protected:
BOOL _SendCmd(LPCSTR Command);
private:
void _OnConnect( int nErrorCode );
void _OnReceive( int nErrorCode );
void _OnClose( int nErrorCode );
BOOL _Execute(LPCSTR Command);
};
enum // FTP File modes
{
FTPG_LIST, // Get file listing
FTPG_RCVFILE, // Get a "real" file
FTPG_SNDFILE, // Send a file
FTPG_INVALID
};
enum // FTP File xmit status
{
PTPX_IDLE, // Nothing going on
FTPX_INIT, // Initialize
FTPX_SIZE, // Get size of file
FTPX_TIME, // Get exact file time
FTPX_REST, // Set file offset
FTPX_TYPE, // Type send
FTPX_PORT, // Port sent
FTPX_PASV, // Pasv sent
FTPX_STOR, // Send file command sent
FTPX_RETR, // Get file command sent
FTPX_HOLD, // Waiting for physical file transfer to end
FTPX_RNFR, // Rename from
FTPX_RNTO, // Rename to
FTPX_DATE, // Get file date
};
enum // DNS lookup's
{
DNS_PREC_LOOKUP = 1, // Pre connect lookup
};
// Server types
#define SVRT_UNKNOWN 0x0001 // Unknown type
#define SVRT_GENERIC_UNIX 0x0002 // Support's LIST -L and other advanced flags
#define SVRT_WARFTPD 0x0004 // War FTP daemon
#define SVRT_PSEUDO_UNIX 0x0008 // Unix like, but not safe/comaptible
#define SVRT_GENERIC_VMS 0x0010 // VMS of some type
enum // Server software
{
SVRS_UNKNOWN,
SVRS_WARFTPD,
SVRS_SERV_U,
SVRS_WFTPD,
SVRS_WU_FTPD,
SVRS_NTFTPD,
SVRS_MSFTPDNT,
SVRS_VERMILLION,
SVRS_INVALID
};
#define SVRMSG_ID 298 // Primitive FTP server message header