WarSoftwareLib.h
上传用户:surprise9
上传日期:2007-01-04
资源大小:426k
文件大小:19k
源码类别:

Ftp客户端

开发平台:

Visual C++

  1. // This is part of the WAR SOFTWARE SERIES initiated by Jarle Aase
  2. // Copyright 1996 by Jarle Aase. All rights reserved.
  3. // See the "War Software Series Licende Agreement" for details concerning 
  4. // use and distribution.
  5. // ---
  6. // This source code, executables and programs containing source code or
  7. // binaries or proprietetary technology from the War Software Series are
  8. // NOT alloed used, viewed or tested by any governmental agencies in
  9. // any countries. This includes the government, departments, police, 
  10. // military etc.
  11. // ---
  12. // This file is intended for use with Tab space = 2
  13. // Created and maintained in MSVC Developer Studio
  14. // ---
  15. // NAME : WarSoftwareLib.h
  16. // PURPOSE :
  17. // PROGRAM : 
  18. // DATE : Sept. 19 1996
  19. // AUTHOR : Jarle Aase
  20. // ---
  21. // REVISION HISTORY
  22. // 
  23. /////////////////////////////////////////////////////////////////////////////////
  24. /////////////////////////////////////////////////////////////////////////////////
  25. // B A S E   C L A S S E S
  26. /////////////////////////////////////////////////////////////////////////////////
  27. /////////////////////////////////////////////////////////////////////////////////
  28. class DLL_WAR_SOFTWARE_ CNotificationWnd : public CWnd
  29. {
  30. public:
  31. static CWnd *m_pWnd;
  32. static CWinThread *m_pThread;
  33. // Construction
  34. public:
  35. CNotificationWnd();
  36. ~CNotificationWnd();
  37. static CWnd *GetWin() {return m_pWnd;}
  38. static HWND GetHwnd() {return m_pWnd->m_hWnd;}
  39. static BOOL IsSameThread() {return m_pThread == AfxGetThread();}
  40. LONG (* m_OnTrayIconMessage)(WPARAM WParam, LPARAM LParam);
  41. protected:
  42. //{{AFX_MSG(CNotificationWnd)
  43. LRESULT OnRctdreq(WPARAM wParam, LPARAM lParam);
  44. LRESULT OnlogLine(WPARAM WParam, LPARAM LParam);
  45. LRESULT OnDNS(WPARAM WParam, LPARAM LParam);
  46. LONG OnTrayIconMessage(WPARAM WParam, LPARAM LParam);
  47. afx_msg void OnStopandquit();
  48. //}}AFX_MSG
  49. DECLARE_MESSAGE_MAP()
  50. };
  51. ////////////////////////////////////////////////////////////////////
  52. // CLog class
  53. // Log Base class
  54. // Must be overloaded in order to be initialized before use.
  55. class DLL_WAR_SOFTWARE_ CLog : public CLogOptions
  56. {
  57. public:
  58. CWarTimer m_Timer; // Last flush
  59. CCriticalSection m_Lock;
  60. CString m_LogQueue; // Queued buffer to flush
  61. CHistory m_LogHistory; // History of the n last lines on log display
  62. BOOL m_UseHistory;
  63. HANDLE m_EventHandle;
  64. static CLog *m_pLog;
  65. DWORD m_Flags;
  66. CLog();
  67. ~CLog();
  68. void LogMsg(int LogType, LPCSTR Format, ...);
  69. void LogMsgV(int LogType, LPCTSTR Format, va_list argList);
  70. static LPCSTR MyTime(LPSTR buf);
  71. static LPCSTR FormatTime(SYSTEMTIME& st, LPSTR buf);
  72. static void SendHistory(LPVOID pOrigin, CDaemonEvent *pCliEv);
  73. BOOL Flush(BOOL Force);
  74. virtual void LoggedLine(int LogType, LPCSTR Line); // Override to log to window
  75. static CLog *GetLog() {return m_pLog;}
  76. };
  77. #define ShouldLog(pLog, flag) (pLog && (pLog->m_Flags &flag))
  78. #define LOGF_DEBUG 0x0001
  79. #define LOGF_ERROR 0x0002
  80. #define LOGF_FILEACC 0x0004
  81. #define LOGF_INOUT 0x0008
  82. #define LOGF_SECURITY 0x0010
  83. #define LOGF_WARNINGS 0x0020
  84. #define LOGF_SYSTEM 0x0040
  85. #define LOGF_WINSOCK 0x0080
  86. ///////////////////////////////////////////////////////////////////////////////////////
  87. // CSock
  88. // Base class for all async socket communicatios
  89. class CSock;
  90. class DLL_WAR_SOFTWARE_ CDNSLookup
  91. {
  92. public:
  93. CDNSLookup();
  94. BOOL Create(CSock *pOrigin, LPCSTR Name = NULL, LPARAM LParam = NULL);
  95. static void DNSlookupCallback(WPARAM Handle, LPARAM Status);
  96. DWORD m_ID; // CSock m_SocketID
  97. char m_Buf[MAXGETHOSTSTRUCT];
  98. LPARAM m_LParam;
  99. CString m_QueryName;
  100. private:
  101. ~CDNSLookup();
  102. HANDLE m_ReqHandle;
  103. static CLinkedList m_List;
  104. };
  105. class DLL_WAR_SOFTWARE_ CSocketException
  106. {
  107. private:
  108. CSocketException();
  109. public:
  110. static void CSocketException::Throw(CSock *pSock,
  111. LPCSTR Module, int ErrorNum, LPCSTR Format, ...);
  112. CString m_FromModule;
  113. CString m_ErrorText;
  114. int m_ErrorNum;
  115. CSock *m_pSock;
  116. };
  117. class DLL_WAR_SOFTWARE_ CSock : public CAsyncSocket
  118. {
  119. public:
  120. DECLARE_DYNAMIC(CSock)
  121. CSock();
  122. ~CSock();
  123. virtual BOOL IsOkToDelete(BOOL IgnoreSuspend = FALSE);
  124. void SuspendDelete() {++m_SuspendDelete;};
  125. void ReleaseSuspendDelete() 
  126. {
  127. --m_SuspendDelete; 
  128. ASSERT(m_SuspendDelete >= 0);
  129. };
  130. virtual void SetName(LPCSTR Name);
  131. static void SetLog(CLog *LogPtr);
  132. virtual void OnAccept( int nErrorCode );
  133. virtual void OnClose( int nErrorCode );
  134. virtual void OnConnect( int nErrorCode );
  135. virtual void _OnConnect( int nErrorCode );
  136. virtual void OnOutOfBandData( int nErrorCode );
  137. virtual void OnReceive( int nErrorCode );
  138. virtual void OnSend( int nErrorCode );
  139. virtual BOOL Accept( CAsyncSocket& rConnectedSocket, SOCKADDR* lpSockAddr = NULL, int* lpSockAddrLen = NULL );
  140. virtual void Close( );
  141. virtual int Receive( void* lpBuf, int nBufLen, int nFlags = 0 );
  142. virtual int Send( const void* lpBuf, int nBufLen, int nFlags = 0 );
  143. virtual void LogLastError(int flag, int eval, LPCSTR msg);
  144. virtual void LogMsg(int flag, LPCSTR Format, ...);
  145. virtual void OnFileCompletion(int nErrorCode);
  146. static BOOL OnIdle( LONG lCount );
  147. virtual CUserFsys *GetFsys();
  148. virtual float GetLapTime();
  149. virtual float GetCPS();
  150. static BOOL GetHostIpNumber(CString& cIpName);
  151. virtual void KillAllChildren();
  152. virtual void IncXferCnt(BOOL Add);
  153. static CSock *GetFromID(DWORD ID);
  154. static CWnd *m_DNSwin;
  155. void InitiateDNSLookup();
  156. virtual void OnDNSLookup(int nErrorCode, CDNSLookup *pDNS);
  157. static void SetDNSWin(CWnd *pWnd);
  158. virtual BOOL OnHandleWinsockErr(int nErrorCode );
  159. static float GetTotalCPS();
  160. void SetIdleTime(int limit);
  161. void SetLogonTime(int limit);
  162. protected:
  163. BOOL DoAccept(CSock *NewSocket );
  164. virtual void SayGoodbye();
  165. public:
  166. CString m_SocketName; // Our own name for the socket
  167. CString m_PeerName; // IP address to remote host
  168. CString m_DNSName;
  169. CString m_HostName; // local IP address for the socket
  170. int m_Type; // Service type
  171. int m_State; // Connection state
  172. BOOL m_IsConnected; // Is the socket connected?
  173. BOOL m_SuspendOnClose; // Dont process OnClose!
  174. CWarTimer m_Timer;
  175. CWarTimer m_ConnectTime;
  176. CWarTimer m_LastSend;
  177. CWarTimer m_LastReceive;
  178. CWarTimer m_StartTime; // First send or receive
  179. int m_MaxIdleTime;
  180. int m_MaxOnlineTime;
  181. BOOL m_ClearToSend;
  182. BOOL m_ClearToReceive;
  183. DWORD m_BytesSent;
  184. DWORD m_BytesReceived;
  185. DWORD m_SocketID; // Sequence number
  186. DWORD m_AsyncSelectMask;
  187. CSock *m_Father; // Ptr to listening socket
  188. static DWORD m_SequenceCounter;
  189. static CLog *m_Log;
  190. static DWORD m_NumSocketsInUse;
  191. static CCriticalSection m_GlobalLock;
  192. static LPSTR DaemonTypes[4];
  193. static m_OverlappedCnt; // Total number of pending overlapped requests
  194. static CLinkedList m_SocketList;
  195. BOOL m_DestructorIsActive; // The destructor is called.
  196. int m_SuspendDelete;
  197. static CWarTimer m_Housekeeping;
  198. // Plugin support
  199. enum // Hooks
  200. {
  201. OnPreFSYSAccess,
  202. OnPostFSYSAccess,
  203. OnGetSecurityDescriptor,
  204. iOnConnect,
  205. iOnReceive,
  206. iOnSend,
  207. iOnCommand,
  208. iOnClose,
  209. iSendCtrlMsg,
  210. iOnSITECmd,
  211. iOnIdle,
  212. iOnVerifyIPAddress,
  213. iOnVerifyUploadedFile,
  214. iOnVerifyTransferRequest,
  215. iOnSocketIsDestroyed,
  216. iOnBadPassword,
  217. iOnHasLoggedOn,
  218. iOnVerifyLogin,
  219. iReserved2,
  220. iReserved3,
  221. iReserved4,
  222. iReserved5,
  223. iReserved6,
  224. iReserved7,
  225. iReserved8,
  226. iReserved9,
  227. iReserved10,
  228. invalid
  229. };
  230. CFuncList m_Funcs[invalid];
  231. };
  232. #define PrcSockExt(FuncID, Event, wParam, lParam)
  233. m_Funcs[FuncID].Process(Event,wParam,lParam)
  234. enum // states m_State
  235. {
  236. PRELOGIN, 
  237. GOTNAME, 
  238. PROCESS, 
  239. HOLD, 
  240. GETFILE, 
  241. PUTFILE, 
  242. QUITTING,
  243. STATE_INVALID
  244. };
  245. enum // Socket type m_Type
  246. {
  247. LT_FTP,
  248. LT_FTP_DATA,
  249. LT_TELNET,
  250. LT_REMOTE,
  251. LT_INVALID
  252. };
  253. #define SOCKERR_IDLETIME -100 // Idle time expired
  254. #define SOCKERR_LOGINTIME -101 // Login time expired
  255. ///////////////////////////////////////////////////////////////////////////////////////
  256. // CBufferSock
  257. // Base class for buffered socket outpot
  258. // Will accept large buffers to speed things up.
  259. class DLL_WAR_SOFTWARE_ CBufferSock : public CSock
  260. {
  261. public:
  262. DECLARE_DYNAMIC(CBufferSock);
  263. CBufferSock();
  264. ~CBufferSock();
  265. virtual void OnSend( int nErrorCode );
  266. virtual int Send( const void* lpBuf, int nBufLen, int nFlags);
  267. long SendBuffer(LPCSTR Buffer, DWORD Size);
  268. virtual BOOL DoOverlapped();
  269. void TrashOutputBuffer();
  270. protected:
  271. virtual BOOL CBufferSock::DoSend();
  272. protected:
  273. LPSTR m_OutBuf;
  274. DWORD m_MaxBufferSize;  // Can be increased during usage
  275. DWORD m_BufferSize; // Current allocated buffer
  276. DWORD m_BufferUsed; // Bytes in use
  277. int m_MaxSendLen; // Bytes to send to Winsock at one time
  278. };
  279. #define BUFFERSOCK_DEFUALT_BUFFER_SIZE (1024 * 8)
  280. #define BUFFERSOCK_DEFUALT_SEND_SIZE (1024 * 8)
  281. #define BufferSock_BufferFree() (m_BufferSize - m_BufferUsed)
  282. ///////////////////////////////////////////////////////////////////////////////////////
  283. // CTextSock
  284. // Base class for ASCII based communications.
  285. // Splits incomming packages into CRLF delimited lines and
  286. // call OnCommand() for each complete line.
  287. // Parse command *must* be overridden
  288. // Also handles Telnet negotiation.
  289. // Outgoing packages are always sent as text buffers.
  290. // Support for standard Internet nnn[-]<sp>Text code replies
  291. // The buffers are queued automatically until a given limit.
  292. class DLL_WAR_SOFTWARE_ CTextSock : public CBufferSock
  293. {
  294. public:
  295. DECLARE_DYNAMIC(CTextSock);
  296. int m_LocalEcho; // 1 == normal echo, >1 = echo fixed char (password mode)
  297. BOOL m_HandleBackspace;
  298. int m_SuspendExpandMacros;
  299. CString m_LoginName; // Login name: jarle@jgaa.ldp.no
  300. int m_User; // User handle
  301. CString m_RootDir;
  302. CString m_HomeDir;
  303. CString m_CWD; // Current Working Directory
  304. BOOL m_IsLoggedInAnonymously;
  305. CLinkedList *m_EventList; // List of events we have installed
  306. CLinkedList *m_EventQueue;
  307. CDaemonEvent *m_Events;
  308. int m_LoginNum;
  309. static int m_LoginCounter;
  310. BOOL m_IsLoggedIn;
  311. int m_StateSave;
  312. // Send file support
  313. BOOL m_SuspendEvents;
  314. HANDLE m_FileHandle;
  315. private:
  316. LPSTR m_InBuf;
  317. DWORD m_BufferSize; // Current allocated buffer
  318. DWORD m_BufferUsed; // Bytes in use
  319. DWORD m_SavedIndex;
  320. BOOL m_HaveIAC;
  321. BOOL m_HaveCR;
  322. protected:
  323. BOOL m_Virgin; // Call the virgin() function until FALSE
  324. int m_LastRcode;
  325. int m_InsertOffset;
  326. // Server side login event managment
  327. static CLinkedList m_UserConnections;
  328. static HANDLE m_SvrEvents;
  329. CString m_Info;
  330. public:
  331. static BOOL InitSvrEvents();
  332. static BOOL TerminateSvrEvents();
  333. virtual void NotifyLogin(DWORD Flags, LPCSTR InfoTxt = NULL, CDaemonEvent *pCliEv = NULL);
  334. static void WhoSendAll(LPVOID pOrigin, CDaemonEvent *pCliEv);
  335. public:
  336. CTextSock();
  337. ~CTextSock();
  338. virtual BOOL OnCommand(LPCSTR Text);
  339. virtual void OnReceive( int nErrorCode );
  340. virtual void OnConnect( int nErrorCode );
  341. virtual void OnClose(int nErrorCode);
  342. virtual BOOL Send(LPCSTR Text);
  343. virtual BOOL SendCtrlMsg(int Rcode, LPCSTR Text, BOOL More = FALSE, BOOL CrLf = TRUE);
  344. virtual BOOL SendMsg(int Rcode, LPCSTR Format, ...);
  345. virtual BOOL DoSend();
  346. virtual void SetName(LPCSTR Name);
  347. virtual BOOL OnHandleWinsockErr(int nErrorCode );
  348. BOOL SendFile(LPCSTR Path, LPCSTR Name);
  349. void SuspendMacros() {m_SuspendExpandMacros++;}
  350. void EnableMacros() {if (m_SuspendExpandMacros) m_SuspendExpandMacros--;}
  351. protected:
  352. virtual void Virgin();
  353. virtual BOOL ProcessTelnetNegotiation(int ch1, int ch2);
  354. virtual void InsertPendingText();
  355. virtual BOOL ExpandMacro(LPSTR *To, LPCSTR MacroName, int AvailBytes);
  356. virtual void SayGoodbye();
  357. };
  358. #define TEXTSOCK_DEFUALT_BUFFER_SIZE (1024 * 4)
  359. #define BufferText_BufferFree() (m_BufferSize - m_BufferUsed)
  360. #define ENL_NEW 0x0001 // New user on list
  361. #define ENL_DEL 0x0002 // Delete user from list
  362. #define ENL_STATE 0x0004 // State has changed
  363. #define ENL_NAME 0x0008 // Name has changed
  364. #define ENL_UPDATE 0x0010 // Update all fields
  365. ///////////////////////////////////////////////////////////////////////////////////////
  366. // CFTPDataSock
  367. // FTP Data channel socket - ready to use
  368. // Override to add statistics for User and update
  369. // of VfSys
  370. class CFTPOverlapped
  371. {
  372. public:
  373. OVERLAPPED m_OverlappedData;
  374. LPSTR m_Buffer;
  375. BOOL m_KillMe;
  376. CFTPDataSock *m_Origin;
  377. CWarFile *m_pFile;
  378. public:
  379. CFTPOverlapped();
  380. ~CFTPOverlapped();
  381. };
  382. class DLL_WAR_SOFTWARE_ CFTPPassiveSock : public CSock
  383. {
  384. public:
  385. CFTPDataSock *m_Origin;
  386. BOOL m_HasAccepted;
  387. SOCKADDR m_Sockaddr;
  388. public:
  389. CFTPPassiveSock();
  390. ~CFTPPassiveSock();
  391. virtual void OnAccept( int nErrorCode );
  392. virtual BOOL Create(CFTPDataSock *Origin, int Port);
  393. private:
  394. void _OnAccept( int nErrorCode );
  395. };
  396. class CRemoteInterface;
  397. class DLL_WAR_SOFTWARE_ CFTPDataSock : public CBufferSock
  398. {
  399. public:
  400. DECLARE_DYNAMIC(CFTPDataSock);
  401. CFTPDataSock **m_PtrToOriginsPtrToMe;
  402. CTextSock *m_OriginD; // Origin for FTP Daemon
  403. CRemoteInterface *m_OriginC; // Origin for FTP Client
  404. CSock *m_OriginB; // Origin base - for simpllicity
  405. CFTPPassiveSock *m_ListeningSock; // Used for passive mode
  406. int m_FTPmode;
  407. int m_FTPtype;
  408. int m_FTPstru;
  409. int m_FTPform;
  410. DWORD m_Flags;
  411. struct sockaddr m_Sockaddr; // Used to connect to remote data socket
  412. BOOL m_IsTmpFile;
  413. CString m_FileName;
  414. CString m_VisualFileName;
  415. FLEN m_FileLength;
  416. FLEN m_StartOffset;
  417. FLEN m_CurrentPosition;
  418. BOOL m_HaveToldUserThatTransfereIsComplete;
  419. BOOL m_UseOverlappedIO;
  420. BOOL m_SendMode; // Send file, false on receive file
  421. CWarFile *m_pFile;
  422. LPSTR m_DataBuffers[2]; 
  423. BOOL m_OverlappedIOReady;
  424. BOOL m_EOF;
  425. int m_OverlappedIOUsed;
  426. int m_OverlappedIOToggle;
  427. CFTPOverlapped *m_Overlapped;
  428. #ifdef _DEBUG
  429. int dm_OverlappedCnt;
  430. #endif
  431. public:
  432. CFTPDataSock();
  433. ~CFTPDataSock();
  434. BOOL Create(CTextSock *Origin, CFTPDataSock ** Ptr, 
  435. int FTPmode, int FTPstru, int FTPform, int FTPtype, 
  436. sockaddr *Sockaddr, BOOL IsPassive, DWORD Flags = 0);
  437. BOOL Create(CRemoteInterface *Origin, CFTPDataSock ** Ptr, 
  438. int FTPmode, int FTPstru, int FTPform, int FTPtype, sockaddr *Sockaddr, 
  439. BOOL Passive, DWORD Flags = 0);
  440. BOOL Create(CRemoteInterface *OriginC, CTextSock *OriginD, CFTPDataSock ** Ptr, 
  441. int FTPmode, int FTPstru, int FTPform, int FTPtype, sockaddr *Sockaddr, 
  442. BOOL Passive, DWORD Flags = 0);
  443. virtual BOOL SendFile(LPCSTR FileName, LPCSTR VisualFileName, 
  444. BOOL IsTmp, FLEN StartOffset, FLEN FileLength);
  445. virtual BOOL ReceiveFile(LPCSTR FileName, LPCSTR VisualFileName, BOOL IsTmp, 
  446. FLEN StartOffset, FLEN FileLength);
  447. virtual BOOL XmitFile(LPCSTR FileName, LPCSTR VisualFileName, BOOL IsTmp, 
  448. FLEN StartOffset, FLEN FileLength);
  449. virtual BOOL DoConnect();
  450. virtual void OnConnect( int nErrorCode );
  451. virtual void OnReceive( int nErrorCode );
  452. virtual BOOL DoSend();
  453. virtual void OnSend( int nErrorCode );
  454. virtual BOOL DoOverlapped();
  455. virtual void OnFileCompletion(int nErrorCode);
  456. virtual void OnClose( int nErrorCode );
  457. virtual BOOL ReadWriteOverlapped();
  458. static VOID WINAPI OnOverlappedIO(DWORD dwErrorCode, 
  459. DWORD dwNumberOfBytesTransfered, LPOVERLAPPED lpOverlapped);
  460. virtual BOOL IsOkToDelete(BOOL IgnoreSuspend = FALSE);
  461. virtual BOOL OnHandleWinsockErr(int nErrorCode );
  462. static void CallbackFileIsCreated(CWarFile *pFile, BOOL Success, LPARAM lParam);
  463. virtual BOOL XmitFileCallback(BOOL Success);
  464. private:
  465. void _OnConnect( int nErrorCode );
  466. void _OnReceive( int nErrorCode );
  467. void _OnClose( int nErrorCode );
  468. };
  469. ///////////////////////////////////////////////////////////////////////////////////////
  470. // CDaemonEvent
  471. // Class to pass events from a module to a remote process.
  472. class CRegisteredEvents
  473. {
  474. public:
  475. CRegisteredEvents();
  476. ~CRegisteredEvents();
  477. public:
  478. int m_Event;
  479. CLinkedList m_ClientEventObjects;
  480. void (* m_DsNotify)(LPVOID pOrigin, CDaemonEvent *pCliEv); // Notification about new event member
  481. LPVOID m_pOrigin;
  482. };
  483. class DLL_WAR_SOFTWARE_ CDaemonEvent
  484. {
  485. public:
  486. CLinkedList *m_DsList; // Pointer to daemon object list to this event
  487. int m_MaxQueueItems;
  488. CLinkedList m_EventQueue;
  489. int m_EventTypes;
  490. CTextSock *m_Client;
  491. BOOL m_ClosePending;
  492. static CLinkedList m_DsEventRegister; // Installed events
  493. public:
  494. // Daemon side functions
  495. static HANDLE DsRegister(int EventType, LPVOID pOrigin, 
  496. void (*)(LPVOID pOrigin, CDaemonEvent *pCliEv));
  497. static BOOL DsClose(HANDLE h);
  498. static BOOL DsEvent(HANDLE h, LPCSTR EventMsg, BOOL Priority = FALSE);
  499. BOOL Event(HANDLE h, LPCSTR EventMsg, BOOL Priority = FALSE, CString *MyCs = NULL);
  500. // Socket side
  501. CDaemonEvent(CTextSock *Socket, int MaxQueueItems);
  502. ~CDaemonEvent();
  503. BOOL Register(int EventType); // Allocate and enable events
  504. BOOL Process(); // Send events to client program
  505. BOOL Close();
  506. BOOL Close(int Events);
  507. private:
  508. static CRegisteredEvents *FindRegisteredEvent(int EventType);
  509. };
  510. #define EVT_LOG 0x0001
  511. #define EVT_STAT 0x0002
  512. #define EVT_CONN 0x0004
  513. ///////////////////////////////////////////////////////////////////////////////////////
  514. // CDaemonStatus
  515. // Current server state
  516. class DLL_WAR_SOFTWARE_ CDaemonStatus : public CObject
  517. {
  518. public:
  519. DECLARE_SERIAL(CDaemonStatus)
  520. SYSTEMTIME m_ServerStarted; // Used by server side
  521. int m_UserConnections;
  522. int m_AnonUserConnections;
  523. int m_OperatorConnections;
  524. int m_UserConnectionsTotal;
  525. int m_AnonUserConnectionsTotal;
  526. int m_OperatorConnectionsTotal;
  527. int m_FileXfers;
  528. int m_FileXfersTotal;
  529. BOOL m_IsOnline;
  530. BOOL m_ShutdownPending;
  531. CString m_ServerName;
  532. CString m_ServerEmail;
  533. CString m_ServerType;
  534. int m_ServerPort;
  535. int m_RemoteAPort;
  536. CString m_ServerListeningIP;
  537. CString m_ServerStartedFmt; // Used by client side
  538. public:
  539. CDaemonStatus();
  540. ~CDaemonStatus();
  541. BOOL Extract(LPSTR Msg);
  542. void Serialize(CArchive& ar);
  543. static CDaemonStatus * GetStat() {return m_pMe; }
  544. private:
  545. static CDaemonStatus *m_pMe;
  546. };
  547. ///////////////////////////////////////////////////////////////////////////////////////
  548. // DES13 password encryption
  549. DLL_WAR_SOFTWARE_ LPCSTR crypt(LPCSTR buf,LPCSTR argSalt, char *buff);
  550. DLL_WAR_SOFTWARE_ BOOL IsDES13validPwd(LPCSTR Password, LPCSTR StoredPassword);
  551. /////////////////////////////////////////////////////////////////////////////////
  552. /////////////////////////////////////////////////////////////////////////////////
  553. // G L O B A L    V A R I A B L E S   a n d   m a n i f e s t s
  554. /////////////////////////////////////////////////////////////////////////////////
  555. /////////////////////////////////////////////////////////////////////////////////
  556. class DLL_WAR_SOFTWARE_ CProgramInfo
  557. {
  558. public:
  559. static LPCSTR m_PROGRAM;
  560. static LPCSTR m_VERSION;
  561. static LPCSTR m_COPYRIGHT;
  562. static int m_SVRTYPE;
  563. enum // Server types
  564. {
  565. stFTP = 1,
  566. stRemoteInterface,
  567. stInvalid
  568. };
  569. };
  570. #define RIOOB_HDR_LEN 10 // Remote Interface OOB header length
  571. #define OOB_HDR "1oob" // OOB header