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.

104 lines
3.7 KiB

  1. ///////////////////////////////////////////////////////////////////////////////
  2. //
  3. // AddrRule.h
  4. //
  5. ///////////////////////////////////////////////////////////////////////////////
  6. // Bring in only once
  7. #pragma once
  8. #include "oerules.h"
  9. // Type definitions
  10. typedef struct tagRULEADDRLIST
  11. {
  12. DWORD dwFlags;
  13. LPSTR pszAddr;
  14. } RULEADDRLIST, * PRULEADDRLIST;
  15. // Interface definitions
  16. interface IOENondlgUnk
  17. {
  18. virtual STDMETHODIMP NondlgQueryInterface(const IID & riid, void ** ppvObject) = 0;
  19. virtual STDMETHODIMP_(ULONG) NondlgAddRef() = 0;
  20. virtual STDMETHODIMP_(ULONG) NondlgRelease() = 0;
  21. };
  22. interface IOERuleAddrList : IUnknown
  23. {
  24. virtual STDMETHODIMP GetList(DWORD dwFlags, RULEADDRLIST ** ppralList, ULONG * pcralList) = 0;
  25. virtual STDMETHODIMP SetList(DWORD dwFlags, RULEADDRLIST * pralList, ULONG cralList) = 0;
  26. virtual STDMETHODIMP Match(DWORD dwFlags, MESSAGEINFO * pMsgInfo, IMimeMessage * pIMMsg) = 0;
  27. virtual STDMETHODIMP IsDirty() = 0;
  28. virtual STDMETHODIMP LoadList(LPCSTR pszRegPath) = 0;
  29. virtual STDMETHODIMP SaveList(LPCSTR pszRegPath, BOOL fClearDirty) = 0;
  30. virtual STDMETHODIMP Clone(IOERuleAddrList ** ppIAddrList) = 0;
  31. };
  32. // Constants
  33. const DWORD RALF_MAIL = 0x00000001;
  34. const DWORD RALF_NEWS = 0x00000002;
  35. const DWORD RALF_MAILNEWS = RALF_MAIL | RALF_NEWS;
  36. class COERuleAddrList : public IOERuleAddrList, IOENondlgUnk
  37. {
  38. private:
  39. enum
  40. {
  41. STATE_UNINIT = 0x00000000,
  42. STATE_INIT = 0x00000001,
  43. STATE_LOADED = 0x00000002,
  44. STATE_DIRTY = 0x00000004
  45. };
  46. enum {RULEADDRLIST_VERSION = 0x00050000};
  47. enum {CCH_EXCPT_KEYNAME_MAX = 9};
  48. private:
  49. LONG m_cRef;
  50. DWORD m_dwState;
  51. DWORD m_dwFlags;
  52. RULEADDRLIST * m_pralList;
  53. ULONG m_cralList;
  54. IUnknown * m_pIUnkOuter;
  55. public:
  56. // Constructor/destructor
  57. COERuleAddrList() : m_cRef(0), m_dwState(0), m_dwFlags(0), m_pralList(NULL),
  58. m_cralList(0), m_pIUnkOuter(NULL) {}
  59. ~COERuleAddrList();
  60. // IUnknown members
  61. virtual STDMETHODIMP QueryInterface(REFIID riid, void ** ppvObject)
  62. { return m_pIUnkOuter->QueryInterface(riid, ppvObject); }
  63. virtual STDMETHODIMP_(ULONG) AddRef(void)
  64. { return m_pIUnkOuter->AddRef(); }
  65. virtual STDMETHODIMP_(ULONG) Release(void)
  66. { return m_pIUnkOuter->Release(); }
  67. // IOENondlgUnk
  68. virtual STDMETHODIMP NondlgQueryInterface(REFIID riid, void ** ppvObject);
  69. virtual STDMETHODIMP_(ULONG) NondlgAddRef(void);
  70. virtual STDMETHODIMP_(ULONG) NondlgRelease(void);
  71. // IOERuleAddrList members
  72. virtual STDMETHODIMP GetList(DWORD dwFlags, RULEADDRLIST ** ppralList, ULONG * pcralList);
  73. virtual STDMETHODIMP SetList(DWORD dwFlags, RULEADDRLIST * pralList, ULONG cralList);
  74. virtual STDMETHODIMP Match(DWORD dwFlags, MESSAGEINFO * pMsgInfo, IMimeMessage * pIMMsg);
  75. virtual STDMETHODIMP IsDirty() {return ((0 != (m_dwState & STATE_DIRTY)) ? S_OK : S_FALSE);}
  76. virtual STDMETHODIMP LoadList(LPCSTR pszRegPath);
  77. virtual STDMETHODIMP SaveList(LPCSTR pszRegPath, BOOL fClearDirty);
  78. virtual STDMETHODIMP Clone(IOERuleAddrList ** ppIAddrList);
  79. // COERuleAddrList members
  80. HRESULT HrInit(DWORD dwFlags, IUnknown * pIUnkOuter);
  81. };
  82. HRESULT HrCreateAddrList(IUnknown * pIUnkOuter, const IID & riid, void ** ppvObject);
  83. VOID FreeRuleAddrList(RULEADDRLIST * pralList, ULONG cralList);