// SMTPServer.h : Declaration of the CSMTPServer #ifndef __SMTPSERVER_H_ #define __SMTPSERVER_H_ #include "resource.h" // main symbols #include ///////////////////////////////////////////////////////////////////////////// // CSMTPServer //class ATL_NO_VTABLE CSMTPServer : class CSMTPServer : public ISupportErrorInfo, public ISMTPServerInternal, public IMailTransportRouterReset, public IMailTransportSetRouterReset, public IMailTransportRouterSetLinkState, public ISMTPServerEx, public ISMTPServerGetAuxDomainInfoFlags, public ISMTPServerAsync { public: CSMTPServer() { m_pInstance = NULL; m_pIRouterReset = NULL; m_pIRouterSetLinkState = NULL; m_ulRefCount = 0; } HRESULT Init(SMTP_SERVER_INSTANCE * pInstance); // ISupportsErrorInfo STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid); // ISMTPServer public: STDMETHOD(QueryInterface)(REFIID iid, void **ppvObject); STDMETHOD_(ULONG, AddRef)(void) {return(InterlockedIncrement(&m_ulRefCount));}; STDMETHOD_(ULONG, Release) (void) { LONG lRefCount = InterlockedDecrement(&m_ulRefCount); if (lRefCount == 0) { delete this; } return(lRefCount); }; STDMETHOD (AllocMessage)( IMailMsgProperties **ppMsg ); STDMETHOD (SubmitMessage)( IMailMsgProperties *pMsg ); STDMETHOD (TriggerLocalDelivery)(IMailMsgProperties *pMsg, DWORD dwRecipientCount, DWORD * pdwRecipIndexes); STDMETHOD (TriggerServerEvent)(DWORD dwEventID, PVOID pvContext); STDMETHOD (ReadMetabaseString)(DWORD MetabaseId, LPBYTE Buffer, DWORD * BufferSize, BOOL fSecure); STDMETHOD (ReadMetabaseDword)(DWORD MetabaseId, DWORD * dwValue); STDMETHOD (ServerStartHintFunction)(); STDMETHOD (ServerStopHintFunction)(); STDMETHOD (AllocBoundMessage)(OUT IMailMsgProperties **ppMsg, OUT PFIO_CONTEXT *phContent); STDMETHOD (WriteLog)(IN LPMSG_TRACK_INFO pMsgTrackInfo, IN IMailMsgProperties *pMsg, IN LPEVENT_LOG_INFO pEventLogInfo, IN LPSTR pszProtocolLog ); STDMETHOD (ReadMetabaseData)(IN DWORD MetabaseId, IN OUT BYTE * Buffer, IN OUT DWORD * BufferSize); public: //IMailTransportRouterReset STDMETHOD (ResetRoutes)(IN DWORD dwResetType); public: //IMailTransportSetRouterReset STDMETHOD (RegisterResetInterface)(IN DWORD dwVirtualServerID, IN IMailTransportRouterReset *pIRouterReset); public: //IMailTransportRouterSetLinkState STDMETHOD(SetLinkState)( IN LPSTR szLinkDomainName, IN GUID guidRouterGUID, IN DWORD dwScheduleID, IN LPSTR szConnectorName, IN DWORD dwSetLinkState, IN DWORD dwUnsetLinkState, IN FILETIME *pftNextScheduled, IN IMessageRouter *pMessageRouter); public: //ISMTPServerEx STDMETHOD(TriggerLogEvent)( IN DWORD idMessage, IN WORD idCategory, IN WORD cSubstrings, IN LPCSTR *rgszSubstrings, IN WORD wType, IN DWORD errCode, IN WORD iDebugLevel, IN LPCSTR szKey, IN DWORD dwOptions, IN DWORD iMessageString, IN HMODULE hModule); STDMETHOD(ResetLogEvent)( IN DWORD idMessage, IN LPCSTR szKey); public: //ISMTPServerGetAuxDomainInfoFlags STDMETHOD(HrTriggerGetAuxDomainInfoFlagsEvent)( IN LPCSTR pszDomainName, OUT DWORD *pdwDomainInfoFlags ); public: //ISMTPServerAsync STDMETHOD(TriggerLocalDeliveryAsync)(IMailMsgProperties *pMsg, DWORD dwRecipientCount, DWORD * pdwRecipIndexes, IMailMsgNotify *pNotify); private: LONG m_ulRefCount; SMTP_SERVER_INSTANCE *m_pInstance; IMailTransportRouterReset *m_pIRouterReset; IMailTransportRouterSetLinkState *m_pIRouterSetLinkState; CShareLockNH m_slRouterReset; }; #endif //__SMTPSERVER_H_