Leaked source code of windows server 2003
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.
|
|
// --------------------------------------------------------------------------------
// Ixpsmtp.h
// Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
// Steven J. Bailey
// --------------------------------------------------------------------------------
#ifndef __IXPSMTP_H
#define __IXPSMTP_H
// ------------------------------------------------------------------------------------
// Depends
// ------------------------------------------------------------------------------------
#include "ixpbase.h"
#include "ixppop3.h"
// --------------------------------------------------------------------------------
// CSMTPTransport
// --------------------------------------------------------------------------------
class CSMTPTransport : public CIxpBase, public ISMTPTransport2 { private: AUTHINFO m_rAuth; // Authorization Information
SMTPCOMMAND m_command; // Current command being processed
SMTPMESSAGE2 m_rMessage; // Current Message
ULONG m_iAddress; // Current RCPT/MAIL address in rAdressList::prgAddress
ULONG m_cRecipients; // Number of recipients for current message
DWORD m_cbSent; // SendDataStream current Number of bytes sent
DWORD m_cbTotal; // SendDataStream total bytes
BOOL m_fSendMessage; // Are we in the process of a ::SendMessage
BOOL m_fReset; // Is a reset needed on next ::SendMessage Call
CHAR m_szEmail[255]; // The last sent email address using MAIL or RCPT
BOOL m_fSTARTTLSAvail; // Is the STARTTLS command available on this server?
BOOL m_fTLSNegotiation; // Are we in TLS negotiation?
BOOL m_fSecured; // Is the connection secured?
BOOL m_fDSNAvail; // Does the server support DSNs?
private: void OnSocketReceive(void); void SendMessage_DATA(void); void SendMessage_MAIL(void); void SendMessage_RCPT(void); void SendMessage_DONE(HRESULT hrResult, LPSTR pszProblem=NULL); HRESULT HrGetResponse(void); void DispatchResponse(HRESULT hrResult, BOOL fDone, LPSTR pszProblem=NULL); void SendStreamResponse(BOOL fDone, HRESULT hrResult, DWORD cbIncrement); HRESULT _HrFormatAddressString(LPCSTR pszEmail, LPCSTR pszExtra, LPSTR *ppszAddress); void OnEHLOResponse(LPCSTR pszResponse); void ResponseAUTH(HRESULT hrResponse); BOOL FSendSicilyString(LPSTR pszData); void CancelAuthInProg(void); void StartLogon(void); void LogonRetry(void); void TryNextAuthPackage(void); void DoLoginAuth(HRESULT hrResponse); void DoPackageAuth(HRESULT hrResponse); void DoAuthNegoResponse(HRESULT hrResponse); void OnAuthorized(void); void RetryPackage(void); void DoAuthRespResponse(HRESULT hrResponse); HRESULT _HrHELO_Or_EHLO(LPCSTR pszCommand, SMTPCOMMAND eNewCommand); LPSTR _PszGetCurrentAddress(void); HRESULT CommandSTARTTLS(void); void StartTLS(void); void TryNextSecurityPkg(void);
public: // ----------------------------------------------------------------------------
// Construction
// ----------------------------------------------------------------------------
CSMTPTransport(void); ~CSMTPTransport(void);
// ----------------------------------------------------------------------------
// IUnknown methods
// ----------------------------------------------------------------------------
STDMETHODIMP QueryInterface(REFIID, LPVOID *); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void);
// ----------------------------------------------------------------------------
// IAsyncConnCB methods
// ----------------------------------------------------------------------------
void OnNotify(ASYNCSTATE asOld, ASYNCSTATE asNew, ASYNCEVENT ae);
// ----------------------------------------------------------------------------
// IInternetTransport methods
// ----------------------------------------------------------------------------
STDMETHODIMP Connect(LPINETSERVER pInetServer, boolean fAuthenticate, boolean fCommandLogging); STDMETHODIMP DropConnection(void); STDMETHODIMP Disconnect(void); STDMETHODIMP IsState(IXPISSTATE isstate); STDMETHODIMP GetServerInfo(LPINETSERVER pInetServer); STDMETHODIMP_(IXPTYPE) GetIXPType(void); STDMETHODIMP InetServerFromAccount(IImnAccount *pAccount, LPINETSERVER pInetServer); STDMETHODIMP HandsOffCallback(void); STDMETHODIMP GetStatus(IXPSTATUS *pCurrentStatus);
// ----------------------------------------------------------------------------
// ISMTPTransport methods
// ----------------------------------------------------------------------------
STDMETHODIMP InitNew(LPSTR pszLogFilePath, ISMTPCallback *pCallback); STDMETHODIMP SendMessage(LPSMTPMESSAGE pMessage); STDMETHODIMP FreeInetAddrList(LPINETADDRLIST pAddressList); STDMETHODIMP CommandAUTH(LPSTR pszAuthType); STDMETHODIMP CommandMAIL(LPSTR pszEmailFrom); STDMETHODIMP CommandRCPT(LPSTR pszEmailTo); STDMETHODIMP CommandEHLO(void); STDMETHODIMP CommandHELO(void); STDMETHODIMP CommandQUIT(void); STDMETHODIMP CommandRSET(void); STDMETHODIMP CommandDATA(void); STDMETHODIMP CommandDOT(void); STDMETHODIMP SendDataStream(IStream *pStream, ULONG cbSize);
// ----------------------------------------------------------------------------
// ISMTPTransport2 methods
// ----------------------------------------------------------------------------
STDMETHODIMP SendMessage2(LPSMTPMESSAGE2 pMessage); STDMETHODIMP CommandRCPT2(LPSTR pszEmailTo, INETADDRTYPE atDSN); STDMETHODIMP SetWindow(void); STDMETHODIMP ResetWindow(void);
// ----------------------------------------------------------------------------
// CIxpBase methods
// ----------------------------------------------------------------------------
virtual void ResetBase(void); virtual void DoQuit(void); virtual void OnConnected(void); virtual void OnDisconnected(void); virtual void OnEnterBusy(void); virtual void OnLeaveBusy(void); };
#endif // __IXPSMTP_H
|