⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mailbox.h

📁 一个邮件客户端源代码,包括收发邮件,安排日程等很多内容
💻 H
字号:
// Copyright (C) 1997-2002 Valeriy Ovechkin
// 
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
// 
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
// 
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
//
#ifndef MAILBOX_INCLUDED
#define MAILBOX_INCLUDED

#include "main.h"
#include "WatchDog.h"

enum
{
	/* final status - success */
	MBOX_NOT_CHECKED,		
	MBOX_CHECKED,
	MBOX_INTERRUPTED_BY_USER,

	/* final status - error */
	MBOX_CANNOT_CONNECT = 100,
	MBOX_CANNOT_CHECK,
	MBOX_CANNOT_SEND,
	MBOX_NETWORK_FAILED,
	MBOX_SERVER_FAILED,
	MBOX_CONNECTION_WAS_LOST,
	MBOX_SOCKET_ERROR,
	MBOX_INVALID_USER,
	MBOX_INVALID_HOST,
	MBOX_INVALID_PASS,

	/* in progress */
	MBOX_RESOLVING = 1000,
	MBOX_CONNECTING,
	MBOX_WF_USER_RESPONSE,
	MBOX_WF_APOP_RESPONSE,
	MBOX_WF_PASS_RESPONSE,
	MBOX_WF_FIRST_NOOP,
	MBOX_WF_SECOND_NOOP,
	MBOX_WF_UIDL_RESPONSE,
	MBOX_WF_TOPEX_RESPONSE,
	MBOX_WF_LIST_RESPONSE,
	MBOX_WF_TOP_RESPONSE,
	MBOX_WF_RETR_RESPONSE,
	MBOX_DOWNLOADING_DATA,
	MBOX_WF_DELE_RESPONSE,
    MBOX_WF_TOPF_RESPONSE,     //  against pop3 flash server weakness
};

#define STATE_FINAL(s)		((s)<1000)
#define STATE_ERROR(s)		( (100<=(s)) && ((s)<1000) )

enum
{
	ACTION_NULL = -1,
	ACTION_NONE,
	ACTION_SPECIFIC,
	ACTION_DEFAULT,
};

enum
{
	PLAYBACK_DEVICE_NULL = -1,
	PLAYBACK_DEVICE_FILE,
	PLAYBACK_DEVICE_CDA,
};

enum
{
	COMMAND_RUN_NULL = -1,
	COMMAND_RUN_NORMAL,
	COMMAND_RUN_MINIMIZED,
	COMMAND_RUN_MAXIMIZED,
	COMMAND_RUN_HIDDEN,
};

class Tristate
{
	int m_iValue;
	bool m_bDefaultValue;
	
public:

	Tristate( bool bDefaultValue ) : 
		m_bDefaultValue( bDefaultValue ), 
		m_iValue( -1 ) 
	{
	}

	operator bool() const
	{
		return ( IsSet() ? ( m_iValue == 1 ) : m_bDefaultValue ); 
	};

	bool IsSet() const { return m_iValue != -1; }
	void Unset() { m_iValue = -1; }

	Tristate& operator=( bool bNewValue )
	{
		m_iValue = ( bNewValue ? 1 : 0 );
		return *this;
	}
};

class CExcerpt;
template < class BASE_CLASS, class TYPE > class CTypedPtrArray;

enum MailBoxFlags
{
	MBF_NO_APOP		=	0x0001,
	MBF_PASSIVE		=	0x0002,
	MBF_ASK_PASS	=	0x0004,
	MBF_SPEC_TOP	=	0x0008,	// for FLASH box

	MBF_DEFAULT = 0,
};
class CMailbox : public CAsyncSocket, public CWatchDog
{
	DECLARE_SERIAL( CMailbox );

	HANDLE m_hResolveJob;
	char *m_pResolveBuffer;
	CByteArray m_arrayPacket;

	CUIntArray m_aIndices;
	int m_intOrder;

	// server traits
	CString	 m_sServerGreeting;
	Tristate m_tServerSupportsAPOP;
	Tristate m_tServerSupportsUIDL;
	Tristate m_tServerSupportsBurstWrites;
	ULONG m_ulongIP;

	bool m_bLog;
	CString m_strLog;

	void InitializeServerTraits()
	{
		m_sServerGreeting.Empty();
		m_tServerSupportsAPOP.Unset();
		m_tServerSupportsUIDL.Unset();
		m_tServerSupportsBurstWrites.Unset();
		m_ulongIP = 0;
	}

	CString m_strLastError;
	void AppendToLog( const CString& );

	void RecoverString( CString& );
	void BeginResolveHostByName();
	void ParseString( char *str, int len, int size );
	void OrderAssignedToID( int order, const char *str );
	void FinishReceivingID();
	void SendBurstWriteSenseRequest();
	void SendUidlRequest();
	void SendListRequest();
	void SendTopExRequest();
  void SendTopFRequest();

	void SendInitialTopRequest();
	void SendTopRequest();
	bool SendTopRequest( unsigned uIndex );

	void SendInitialRetrRequest();
	void SendRetrRequest();
	void SendRetrRequest( unsigned uIndex );

	void SendInitialDeleRequest();
	void SendDeleRequest();
	void SendDeleRequest( unsigned uIndex );

	void SendQuitRequest( int intState );


	// overwrite CAsyncSocket::Send
	bool Send( const void* lpBuf, int nBufLen );

	// implement a notification from CAsyncSocket
	void OnClose( int nErrorCode );

public:
	void CancelPendingJobs();
	void Check();
	void StopChecking();
	void EndResolveHostByName( WPARAM, LPARAM );

	const CString& GetGreeting() const;
	unsigned GetIPAddress() const;
	const Tristate& GetAPOPSupported() const;
	const Tristate& GetUIDLSupported() const;
	const Tristate& GetBurstWritesSupported() const;

	BOOL IsDisabled() const;
	bool IsLoggingEnabled() const;
	void EnableLogging( bool );
	const CString& GetLogString() const;
	CString GetPassword();
	int  GetExtraLines();

	BOOL UpdateUnreadStatus();	// TRUE, if state was changed
	int		m_nUnread;

	UINT m_uMciID;
	HANDLE m_hCmdID;

	int m_intClue;
	int m_intPort;
	DWORD	m_dwFlags;
	BYTE    m_nExtraLines;
	int m_intPoll;
	int m_intElapsed;
	CString m_strAlias;
	CString m_strPass;
	CString m_strUser;
	CString m_strHost;
	/* shell command parameters */
	int m_intCommand;
	int m_intCommandRun;
	CString m_strCommand;
	/* mci playback parameters */
	int m_intPlayback;
	int m_intPlaybackDevice;
	CString m_strPlayback;
	/* popup message parameter */
	int m_intMessage;

	CTypedPtrArray < CPtrArray, CExcerpt* > m_arrayExcerpt;

	/* arrtibutes */
	int m_intState;
	unsigned m_bitSelected : 1;
	unsigned m_bitCreated : 1;
	unsigned m_bitDeleted : 1;

	/* update info */
	int m_intChanged;
	int IsChanged( int intColumn ) { return m_intChanged & BIT( intColumn ); }
	void Change( int intColumn ) { m_intChanged |= BIT( intColumn ); }

	void SetClue( void ) { m_intClue += (int) time(0); }
	void SetElapsed( void ) { if( 0 <= m_intElapsed ) { ++m_intElapsed; Change( COLUMN_ELAPSED ); } }
	void SetAlias( CString &strAlias );
	void SetUser( CString &strUser );
	void SetHost( CString &strHost );
	void SetPass( CString &strPass, BOOL bAsk );
	void SetState( int );
	void SetPort( int intPort );
	void SetPoll( int intPoll );
	void DisableAPOP(int nAPOP);
	void SetSpecTOP(int nTOP);
	void Disable(int bDisableBox);

	bool IsSecure() { return ( m_tServerSupportsAPOP.IsSet() ? m_tServerSupportsAPOP : false ); };

	const CString& GetLastErrorDescription() { return m_strLastError; }

	//{{AFX_VIRTUAL(CMailbox)
	virtual void Serialize(CArchive& ar);
	//}}AFX_VIRTUAL

	CMailbox();
	CMailbox( CMailbox& that );
	virtual ~CMailbox();
	CMailbox& operator=( CMailbox& );

protected:

	// WatchDog
	void WatchDogTimedOut();

	virtual void OnReceive( int nErrorCode );
	virtual void OnConnect( int nErrorCode );
};

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -