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.

323 lines
16 KiB

  1. // ---------------------------------------------------------------------------------------
  2. // Spoolapi.h
  3. // Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
  4. // ---------------------------------------------------------------------------------------
  5. #ifndef __SPOOLAPI_H
  6. #define __SPOOLAPI_H
  7. // --------------------------------------------------------------------------------
  8. // Globals
  9. // --------------------------------------------------------------------------------
  10. extern BOOL g_fCheckOutboxOnShutdown;
  11. // ---------------------------------------------------------------------------------------
  12. // Forward Decls
  13. // ---------------------------------------------------------------------------------------
  14. interface ISpoolerEngine;
  15. interface ISpoolerBindContext;
  16. interface ISpoolerTask;
  17. interface ISpoolerUI;
  18. interface IImnAccount;
  19. #include "error.h" // This get's the ATH_HR_x() macros
  20. // ---------------------------------------------------------------------------------------
  21. // Errors
  22. // ---------------------------------------------------------------------------------------
  23. #define SP_HR_FIRST 0x2000
  24. #define SP_E_ALREADYINITIALIZED ATH_HR_E(SP_HR_FIRST + 1)
  25. #define SP_E_UNINITIALIZED ATH_HR_E(SP_HR_FIRST + 2)
  26. #define SP_E_EVENTNOTFOUND ATH_HR_E(SP_HR_FIRST + 3)
  27. #define SP_E_EXECUTING ATH_HR_E(SP_HR_FIRST + 4)
  28. #define SP_E_CANNOTCONNECT ATH_HR_E(SP_HR_FIRST + 5)
  29. #define SP_E_HTTP_NOSENDMSGURL ATH_HR_E(SP_HR_FIRST + 6)
  30. #define SP_E_HTTP_SERVICEDOESNTWORK ATH_HR_E(SP_HR_FIRST + 7)
  31. #define SP_E_HTTP_NODELETESUPPORT ATH_HR_E(SP_HR_FIRST + 8)
  32. #define SP_E_HTTP_CANTMODIFYMSNFOLDER ATH_HR_E(SP_HR_FIRST + 9)
  33. // ---------------------------------------------------------------------------------------
  34. // SMTP Task Errors
  35. // ---------------------------------------------------------------------------------------
  36. #define SP_E_SMTP_CANTOPENMESSAGE ATH_HR_E(SP_HR_FIRST + 200)
  37. #define SP_E_SENDINGSPLITGROUP ATH_HR_E(SP_HR_FIRST + 202)
  38. #define SP_E_CANTLEAVEONSERVER ATH_HR_E(SP_HR_FIRST + 203)
  39. #define SP_E_CANTLOCKUIDLCACHE ATH_HR_E(SP_HR_FIRST + 204)
  40. #define SP_E_POP3_RETR ATH_HR_E(SP_HR_FIRST + 205)
  41. #define SP_E_CANT_MOVETO_SENTITEMS ATH_HR_E(SP_HR_FIRST + 206)
  42. // ---------------------------------------------------------------------------------------
  43. // Spooler Types
  44. // ---------------------------------------------------------------------------------------
  45. typedef DWORD EVENTID;
  46. typedef LPDWORD LPEVENTID;
  47. // ---------------------------------------------------------------------------------------
  48. // Spooler Delivery Types
  49. // ---------------------------------------------------------------------------------------
  50. // Common delivery flags
  51. #define DELIVER_COMMON_MASK 0x000000FF
  52. #define DELIVER_BACKGROUND 0x00000001 // No progress UI, but will show errors at the end if DELIVER_NOUI not specified
  53. #define DELIVER_NOUI 0x00000002 // No UI at all. Errors are silently ignored.
  54. #define DELIVER_NODIAL 0x00000004 // Not allowed to change the current connection
  55. #define DELIVER_POLL 0x00000008 // Poll for new messages
  56. #define DELIVER_QUEUE 0x00000010 // A request was made while busy
  57. #define DELIVER_SHOW 0x00000020 // Simply show the spooler UI
  58. #define DELIVER_REFRESH 0x00000040 // Simply refresh based on background, noui
  59. #define DELIVER_DIAL_ALWAYS 0x00000080
  60. // Mail delivery flags
  61. #define DELIVER_MAIL_MASK 0x0000FF00
  62. #define DELIVER_SEND 0x00000100
  63. #define DELIVER_MAIL_RECV 0x00000200
  64. #define DELIVER_MAIL_NOSKIP 0x00000400
  65. #define DELIVER_MAIL_SENDRECV (DELIVER_SEND | DELIVER_MAIL_RECV | DELIVER_IMAP_TYPE \
  66. | DELIVER_HTTP_TYPE | DELIVER_SMTP_TYPE)
  67. //Flag to distinguish between Send&Receive and synchronize
  68. #define DELIVER_OFFLINE_SYNC 0x00000800
  69. //Flag to distinguish between Send&Receive triggered by timer and Send&Receive invoked by the user
  70. //We need to distinguish these because we hangup the phone in the first case, if we dialed
  71. #define DELIVER_AT_INTERVALS 0x00001000
  72. #define DELIVER_OFFLINE_HEADERS 0x00002000
  73. #define DELIVER_OFFLINE_NEW 0x00004000
  74. #define DELIVER_OFFLINE_ALL 0x00008000
  75. #define DELIVER_OFFLINE_MARKED 0x00010000
  76. #define DELIVER_NOSKIP 0x00020000
  77. #define DELIVER_NO_NEWSPOLL 0x00040000
  78. #define DELIVER_WATCH 0x00080000
  79. //The first three bits are reserved for Server Types
  80. #define DELIVER_NEWS_TYPE 0x00100000
  81. #define DELIVER_IMAP_TYPE 0x00200000
  82. #define DELIVER_HTTP_TYPE 0x00400000
  83. #define DELIVER_SMTP_TYPE 0x00800000
  84. #define DELIVER_MAIL_SEND (DELIVER_SEND | DELIVER_SMTP_TYPE | DELIVER_HTTP_TYPE)
  85. #define DELIVER_NEWS_SEND (DELIVER_SEND | DELIVER_NEWS_TYPE)
  86. #define DELIVER_SERVER_TYPE_MASK 0x00F00000
  87. #define DELIVER_SERVER_TYPE_ALL 0x00F00000
  88. #define DELIVER_OFFLINE_FLAGS (DELIVER_OFFLINE_HEADERS | DELIVER_OFFLINE_NEW | \
  89. DELIVER_OFFLINE_ALL | DELIVER_OFFLINE_MARKED)
  90. #define DELIVER_IMAP_MASK (DELIVER_IMAP_TYPE | DELIVER_OFFLINE_FLAGS)
  91. #define DELIVER_NEWS_MASK (DELIVER_NEWS_TYPE | DELIVER_OFFLINE_FLAGS)
  92. /*
  93. // News delivery flags
  94. #define DELIVER_NEWS_MASK 0x007F0000
  95. #define DELIVER_NEWS_SEND 0x00010000
  96. // IMAP delivery flags
  97. #define DELIVER_IMAP_MASK 0x007E0000
  98. // Combined News and IMAP delivery flags
  99. #define DELIVER_NEWSIMAP_OFFLINE 0x00020000 // General offline for server, when "Sync Now" button in AcctView pushed
  100. #define DELIVER_NEWSIMAP_OFFLINE_HEADERS 0x00040000
  101. #define DELIVER_NEWSIMAP_OFFLINE_NEW 0x00080000
  102. #define DELIVER_NEWSIMAP_OFFLINE_ALL 0x00100000
  103. #define DELIVER_NEWSIMAP_OFFLINE_MARKED 0x00200000
  104. #define DELIVER_NEWSIMAP_OFFLINE_FLAGS (DELIVER_NEWSIMAP_OFFLINE_HEADERS | DELIVER_NEWSIMAP_OFFLINE_NEW | DELIVER_NEWSIMAP_OFFLINE_ALL | DELIVER_NEWSIMAP_OFFLINE_MARKED)
  105. #define DELIVER_NEWSIMAP_NOSKIP 0x00400000
  106. */
  107. // Combinations
  108. #define DELIVER_BACKGROUND_POLL (DELIVER_NODIAL | DELIVER_BACKGROUND | DELIVER_NOUI | DELIVER_POLL | DELIVER_WATCH | \
  109. DELIVER_MAIL_RECV | DELIVER_SEND | DELIVER_SERVER_TYPE_ALL)
  110. #define DELIVER_BACKGROUND_POLL_DIAL (DELIVER_BACKGROUND | DELIVER_NOUI | DELIVER_POLL | DELIVER_WATCH | \
  111. DELIVER_MAIL_RECV | DELIVER_SEND | DELIVER_SERVER_TYPE_ALL)
  112. #define DELIVER_BACKGROUND_POLL_DIAL_ALWAYS (DELIVER_DIAL_ALWAYS | DELIVER_BACKGROUND | DELIVER_NOUI | DELIVER_POLL | DELIVER_WATCH | \
  113. DELIVER_MAIL_RECV | DELIVER_SEND | DELIVER_SERVER_TYPE_ALL)
  114. #define DELIVER_UPDATE_ALL (DELIVER_MAIL_RECV | DELIVER_SEND | DELIVER_POLL | DELIVER_WATCH | \
  115. DELIVER_OFFLINE_FLAGS | DELIVER_SERVER_TYPE_ALL)
  116. // ---------------------------------------------------------------------------------------
  117. // Event completion types
  118. // ---------------------------------------------------------------------------------------
  119. typedef enum tagEVENTCOMPLETEDSTATUS {
  120. EVENT_SUCCEEDED,
  121. EVENT_WARNINGS,
  122. EVENT_FAILED,
  123. EVENT_CANCELED
  124. } EVENTCOMPLETEDSTATUS;
  125. // ------------------------------------------------------------------------------------
  126. // DELIVERYNOTIFYTYPE
  127. // ------------------------------------------------------------------------------------
  128. typedef enum tagDELIVERYNOTIFYTYPE {
  129. DELIVERY_NOTIFY_STARTING, // Sent by spengine when a delivery cycle starts
  130. DELIVERY_NOTIFY_CONNECTING,
  131. DELIVERY_NOTIFY_SECURE,
  132. DELIVERY_NOTIFY_UNSECURE,
  133. DELIVERY_NOTIFY_AUTHORIZING,
  134. DELIVERY_NOTIFY_CHECKING,
  135. DELIVERY_NOTIFY_CHECKING_NEWS,
  136. DELIVERY_NOTIFY_SENDING,
  137. DELIVERY_NOTIFY_SENDING_NEWS,
  138. DELIVERY_NOTIFY_RECEIVING,
  139. DELIVERY_NOTIFY_RECEIVING_NEWS,
  140. DELIVERY_NOTIFY_COMPLETE, // lParam == n new messages
  141. DELIVERY_NOTIFY_RESULT, // lParam == EVENTCOMPLETEDSTATUS
  142. DELIVERY_NOTIFY_ALLDONE // Sent by spengine when all tasks have completed
  143. } DELIVERYNOTIFYTYPE;
  144. // ------------------------------------------------------------------------------------
  145. // TRAYICONTYPE
  146. // ------------------------------------------------------------------------------------
  147. typedef enum tagTRAYICONTYPE {
  148. TRAYICON_ADD,
  149. TRAYICON_REMOVE
  150. } TRAYICONTYPE;
  151. // ---------------------------------------------------------------------------------------
  152. // IID_ISpoolerEngine
  153. // ---------------------------------------------------------------------------------------
  154. DECLARE_INTERFACE_(ISpoolerEngine, IUnknown)
  155. {
  156. // -----------------------------------------------------------------------------------
  157. // IUnknown members
  158. // -----------------------------------------------------------------------------------
  159. STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
  160. STDMETHOD_(ULONG, AddRef)(THIS) PURE;
  161. STDMETHOD_(ULONG, Release)(THIS) PURE;
  162. // -----------------------------------------------------------------------------------
  163. // ISpooerEngine members
  164. // -----------------------------------------------------------------------------------
  165. STDMETHOD(Init)(THIS_ ISpoolerUI *pUI, BOOL fPoll) PURE;
  166. STDMETHOD(StartDelivery)(THIS_ HWND hwnd, LPCSTR pszAcctID, FOLDERID idFolder, DWORD dwFlags) PURE;
  167. STDMETHOD(Close)(THIS) PURE;
  168. STDMETHOD(Advise)(THIS_ HWND hwndView, BOOL fRegister) PURE;
  169. STDMETHOD(GetThreadInfo)(THIS_ LPDWORD pdwThreadId, HTHREAD* phThread) PURE;
  170. STDMETHOD(UpdateTrayIcon)(THIS_ TRAYICONTYPE type) PURE;
  171. STDMETHOD(IsDialogMessage)(THIS_ LPMSG pMsg) PURE;
  172. STDMETHOD(OnStartupFinished)(THIS) PURE;
  173. };
  174. // ---------------------------------------------------------------------------------------
  175. // IID_ISpoolerBindContext
  176. // ---------------------------------------------------------------------------------------
  177. DECLARE_INTERFACE_(ISpoolerBindContext, IUnknown)
  178. {
  179. // -----------------------------------------------------------------------------------
  180. // IUnknown members
  181. // -----------------------------------------------------------------------------------
  182. STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
  183. STDMETHOD_(ULONG, AddRef)(THIS) PURE;
  184. STDMETHOD_(ULONG, Release)(THIS) PURE;
  185. // -----------------------------------------------------------------------------------
  186. // ISpoolerBindContext members
  187. // -----------------------------------------------------------------------------------
  188. STDMETHOD(UpdateTrayIcon)(THIS_ TRAYICONTYPE type) PURE;
  189. STDMETHOD(RegisterEvent)(THIS_ LPCSTR pszDescription, ISpoolerTask *pTask, DWORD_PTR dwTwinkie, IImnAccount *pAccount, LPEVENTID peid) PURE;
  190. STDMETHOD(EventDone)(THIS_ EVENTID eid, EVENTCOMPLETEDSTATUS status) PURE;
  191. STDMETHOD(BindToObject)(THIS_ REFIID riid, LPVOID *ppvObject) PURE;
  192. STDMETHOD(TaskFromEventId)(THIS_ EVENTID eid, ISpoolerTask *ppTask) PURE;
  193. STDMETHOD(OnWindowMessage)(THIS_ HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) PURE;
  194. STDMETHOD(Cancel)(THIS) PURE;
  195. STDMETHOD(Notify)(THIS_ DELIVERYNOTIFYTYPE notify, LPARAM lParam) PURE;
  196. STDMETHOD(PumpMessages)(THIS) PURE;
  197. STDMETHOD(UIShutdown)(THIS) PURE;
  198. STDMETHOD(OnUIChange)(THIS_ BOOL fVisible) PURE;
  199. STDMETHOD_(LRESULT, QueryEndSession)(THIS_ WPARAM wParam, LPARAM lParam) PURE;
  200. };
  201. // ---------------------------------------------------------------------------------------
  202. // IID_ISpoolerTask
  203. // ---------------------------------------------------------------------------------------
  204. DECLARE_INTERFACE_(ISpoolerTask, IUnknown)
  205. {
  206. // -----------------------------------------------------------------------------------
  207. // IUnknown members
  208. // -----------------------------------------------------------------------------------
  209. STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
  210. STDMETHOD_(ULONG, AddRef)(THIS) PURE;
  211. STDMETHOD_(ULONG, Release)(THIS) PURE;
  212. // -----------------------------------------------------------------------------------
  213. // ISpoolerTask members
  214. // -----------------------------------------------------------------------------------
  215. STDMETHOD(Init)(THIS_ DWORD dwFlags, ISpoolerBindContext *pBindCtx) PURE;
  216. STDMETHOD(BuildEvents)(THIS_ ISpoolerUI *pSpoolerUI, IImnAccount *pAccount, FOLDERID idFolder) PURE;
  217. STDMETHOD(Execute)(THIS_ EVENTID eid, DWORD_PTR dwTwinkie) PURE;
  218. STDMETHOD(CancelEvent)(THIS_ EVENTID eid, DWORD_PTR dwTwinkie) PURE;
  219. STDMETHOD(ShowProperties)(THIS_ HWND hwndParent, EVENTID eid, DWORD_PTR dwTwinkie) PURE;
  220. STDMETHOD(GetExtendedDetails)(THIS_ EVENTID eid, DWORD_PTR dwTwinkie, LPSTR *ppszDetails) PURE;
  221. STDMETHOD(Cancel)(THIS) PURE;
  222. STDMETHOD(IsDialogMessage)(THIS_ LPMSG pMsg) PURE;
  223. STDMETHOD(OnFlagsChanged)(THIS_ DWORD dwFlags) PURE;
  224. };
  225. // ---------------------------------------------------------------------------------------
  226. // IID_ISpoolerUI
  227. // ---------------------------------------------------------------------------------------
  228. DECLARE_INTERFACE_(ISpoolerUI, IUnknown)
  229. {
  230. // -----------------------------------------------------------------------------------
  231. // IUnknown members
  232. // -----------------------------------------------------------------------------------
  233. STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
  234. STDMETHOD_(ULONG, AddRef)(THIS) PURE;
  235. STDMETHOD_(ULONG, Release)(THIS) PURE;
  236. // -----------------------------------------------------------------------------------
  237. // ISpoolerUI members
  238. // -----------------------------------------------------------------------------------
  239. STDMETHOD(Init)(THIS_ HWND hwndParent) PURE;
  240. STDMETHOD(RegisterBindContext)(THIS_ ISpoolerBindContext *pBindCtx) PURE;
  241. STDMETHOD(InsertEvent)(THIS_ EVENTID eid, LPCSTR pszDescription, LPCWSTR pszConnection) PURE;
  242. STDMETHOD(InsertError)(THIS_ EVENTID eid, LPCSTR pszError) PURE;
  243. STDMETHOD(UpdateEventState)(THIS_ EVENTID eid, INT nIcon, LPCSTR pszDescription, LPCSTR pszStatus) PURE;
  244. STDMETHOD(SetProgressRange)(THIS_ WORD wMax) PURE;
  245. STDMETHOD(SetProgressPosition)(WORD wPos) PURE;
  246. STDMETHOD(IncrementProgress)(THIS_ WORD wDelta) PURE;
  247. STDMETHOD(SetGeneralProgress)(THIS_ LPCSTR pszProgress) PURE;
  248. STDMETHOD(SetSpecificProgress)(THIS_ LPCSTR pszProgress) PURE;
  249. STDMETHOD(SetAnimation)(THIS_ INT nAnimationID, BOOL fPlay) PURE;
  250. STDMETHOD(EnsureVisible)(THIS_ EVENTID eid) PURE;
  251. STDMETHOD(ShowWindow)(THIS_ INT nCmdShow) PURE;
  252. STDMETHOD(GetWindow)(THIS_ HWND *pHwnd) PURE;
  253. STDMETHOD(StartDelivery)(THIS) PURE;
  254. STDMETHOD(GoIdle)(THIS_ BOOL fErrors, BOOL fShutdown, BOOL fNoSync) PURE;
  255. STDMETHOD(ClearEvents)(THIS) PURE;
  256. STDMETHOD(SetTaskCounts)(THIS_ DWORD cSucceeded, DWORD cTotal) PURE;
  257. STDMETHOD(IsDialogMessage)(THIS_ LPMSG pMsg) PURE;
  258. STDMETHOD(Close)(THIS) PURE;
  259. STDMETHOD(ChangeHangupOption)(THIS_ BOOL fEnable, DWORD dwOption) PURE;
  260. STDMETHOD(AreThereErrors)(THIS) PURE;
  261. STDMETHOD(Shutdown)(THIS) PURE;
  262. };
  263. // ------------------------------------------------------------------------------------
  264. // Exported C Functions
  265. // ------------------------------------------------------------------------------------
  266. #ifdef __cplusplus
  267. extern "C" {
  268. #endif
  269. typedef HRESULT (APIENTRY *PFNCREATESPOOLERUI)(ISpoolerUI **ppSpoolerUI);
  270. HRESULT CreateThreadedSpooler(
  271. /* in */ PFNCREATESPOOLERUI pfnCreateUI,
  272. /* out */ ISpoolerEngine **ppSpooler,
  273. /* in */ BOOL fPoll);
  274. HRESULT CloseThreadedSpooler(
  275. /* in */ ISpoolerEngine *pSpooler);
  276. #ifdef __cplusplus
  277. }
  278. #endif
  279. #endif // __SPOOLAPI_H