Source code of Windows XP (NT5)
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.

1884 lines
59 KiB

  1. //+------------------------------------------------------------
  2. //
  3. // Copyright (C) 1999, Microsoft Corporation
  4. //
  5. // File: smtpevent.idl
  6. //
  7. // Contents: SMTP Server Event interfaces
  8. //
  9. // Description: This file contains the interface definitions for the
  10. // SMTP Server Events.
  11. //
  12. //-------------------------------------------------------------
  13. cpp_quote("#ifndef __SMTPEVENT_H__")
  14. cpp_quote("#define __SMTPEVENT_H__")
  15. import "unknwn.idl";
  16. import "wtypes.idl";
  17. import "ocidl.idl";
  18. import "mailmsg.idl";
  19. //+------------------------------------------------------------
  20. //
  21. // The SMTP Protocol events interfaces:
  22. //
  23. //-------------------------------------------------------------
  24. cpp_quote("//")
  25. cpp_quote("// Define sink return codes")
  26. cpp_quote("//")
  27. cpp_quote("#define EXPE_S_CONSUMED 0x00000002")
  28. cpp_quote("//")
  29. cpp_quote("// Define well-known status codes")
  30. cpp_quote("//")
  31. cpp_quote("#define EXPE_SUCCESS 0x00000000")
  32. cpp_quote("#define EXPE_NOT_PIPELINED 0x00000000")
  33. cpp_quote("#define EXPE_PIPELINED 0x00000001")
  34. cpp_quote("#define EXPE_REPEAT_COMMAND 0x00000002")
  35. cpp_quote("#define EXPE_BLOB_READY 0x00000004")
  36. cpp_quote("#define EXPE_BLOB_DONE 0x00000008")
  37. cpp_quote("#define EXPE_DROP_SESSION 0x00010000")
  38. cpp_quote("#define EXPE_CHANGE_STATE 0x00020000")
  39. cpp_quote("#define EXPE_TRANSIENT_FAILURE 0x00040000")
  40. cpp_quote("#define EXPE_COMPLETE_FAILURE 0x00080000")
  41. cpp_quote("#define EXPE_UNHANDLED 0xffffffff")
  42. cpp_quote("//")
  43. cpp_quote("// Define constants for next states")
  44. cpp_quote("//")
  45. cpp_quote("typedef enum _PE_STATES")
  46. cpp_quote("{")
  47. cpp_quote(" PE_STATE_DEFAULT = 0,")
  48. cpp_quote(" PE_STATE_SESSION_START,")
  49. cpp_quote(" PE_STATE_MESSAGE_START,")
  50. cpp_quote(" PE_STATE_PER_RECIPIENT,")
  51. cpp_quote(" PE_STATE_DATA_OR_BDAT,")
  52. cpp_quote(" PE_STATE_SESSION_END,")
  53. cpp_quote(" PE_STATE_MAX_STATES = PE_STATE_SESSION_END")
  54. cpp_quote("")
  55. cpp_quote("} PE_STATES;")
  56. cpp_quote("//")
  57. cpp_quote("// Define macros for checking SMTP return code classes")
  58. cpp_quote("//")
  59. cpp_quote("#define IsSmtpPreliminarySuccess(x) ((((x) % 100) == 1)?TRUE:FALSE)")
  60. cpp_quote("#define IsSmtpCompleteSuccess(x) ((((x) % 100) == 2)?TRUE:FALSE)")
  61. cpp_quote("#define IsSmtpIntermediateSuccess(x) ((((x) % 100) == 3)?TRUE:FALSE)")
  62. cpp_quote("#define IsSmtpTransientFailure(x) ((((x) % 100) == 4)?TRUE:FALSE)")
  63. cpp_quote("#define IsSmtpCompleteFailure(x) ((((x) % 100) == 5)?TRUE:FALSE)")
  64. cpp_quote("//")
  65. cpp_quote("// Define well known IServer property IDs")
  66. cpp_quote("//")
  67. cpp_quote("#define PE_ISERVID_DW_INSTANCE 0")
  68. cpp_quote("#define PE_ISERVID_SZ_DEFAULTDOMAIN 1")
  69. cpp_quote("#define PE_ISERVID_DW_CATENABLE 2")
  70. cpp_quote("#define PE_ISERVID_DW_CATFLAGS 3")
  71. cpp_quote("#define PE_ISERVID_DW_CATPORT 4")
  72. cpp_quote("#define PE_ISERVID_SZ_CATUSER 5")
  73. cpp_quote("#define PE_ISERVID_SZ_CATSCHEMA 6")
  74. cpp_quote("#define PE_ISERVID_SZ_CATBINDTYPE 7")
  75. cpp_quote("#define PE_ISERVID_SZ_CATPASSWORD 8")
  76. cpp_quote("#define PE_ISERVID_SZ_CATDOMAIN 9")
  77. cpp_quote("#define PE_ISERVID_SZ_CATNAMINGCONTEXT 10")
  78. cpp_quote("#define PE_ISERVID_SZ_CATDSTYPE 11")
  79. cpp_quote("#define PE_ISERVID_SZ_CATDSHOST 12")
  80. cpp_quote("//")
  81. cpp_quote("// Define well known ISession property IDs")
  82. cpp_quote("//")
  83. cpp_quote("#define ISESSION_PID_IS_SESSION_AUTHENTICATED 0")
  84. cpp_quote("#define ISESSION_PID_AUTHENTICATED_USERNAME 1")
  85. cpp_quote("#define ISESSION_PID_REMOTE_SERVER_NAME 2")
  86. interface ISmtpInCallbackSink;
  87. [
  88. object,
  89. local,
  90. uuid(5F15C533-E90E-11D1-8852-00C04FA35B86),
  91. helpstring("ISmtpInCommandContext Interface"),
  92. pointer_default(unique)
  93. ]
  94. interface ISmtpInCommandContext : IUnknown
  95. {
  96. // Query methods
  97. HRESULT QueryCommand(
  98. [out,size_is(*pdwSize)] LPSTR pszCommand,
  99. [in,out] DWORD *pdwSize
  100. );
  101. HRESULT QueryCommandKeyword(
  102. [out,size_is(*pdwSize)] LPSTR pszKeyword,
  103. [in,out] DWORD *pdwSize
  104. );
  105. HRESULT QueryNativeResponse(
  106. [out,size_is(*pdwSize)] LPSTR pszNativeResponse,
  107. [in,out] DWORD *pdwSize
  108. );
  109. HRESULT QueryResponse(
  110. [out,size_is(*pdwSize)] LPSTR pszResponse,
  111. [in,out] DWORD *pdwSize
  112. );
  113. HRESULT QueryCommandSize(
  114. [out] DWORD *pdwSize
  115. );
  116. HRESULT QueryCommandKeywordSize(
  117. [out] DWORD *pdwSize
  118. );
  119. HRESULT QueryNativeResponseSize(
  120. [out] DWORD *pdwSize
  121. );
  122. HRESULT QueryResponseSize(
  123. [out] DWORD *pdwSize
  124. );
  125. HRESULT QueryCommandStatus(
  126. [out] DWORD *pdwCommandStatus
  127. );
  128. HRESULT QuerySmtpStatusCode(
  129. [out] DWORD *pdwSmtpStatus
  130. );
  131. HRESULT QueryProtocolErrorFlag(
  132. [out] BOOL *pfProtocolError
  133. );
  134. // Set methods
  135. HRESULT SetResponse(
  136. [in,string] LPSTR pszResponse,
  137. [in] DWORD dwSize
  138. );
  139. HRESULT AppendResponse(
  140. [in,string] LPSTR pszResponse,
  141. [in] DWORD dwSize
  142. );
  143. HRESULT SetNativeResponse(
  144. [in,string] LPSTR pszNativeResponse,
  145. [in] DWORD dwSize
  146. );
  147. HRESULT AppendNativeResponse(
  148. [in,string] LPSTR pszNativeResponse,
  149. [in] DWORD dwSize
  150. );
  151. HRESULT SetCommandStatus(
  152. [in] DWORD dwCommandStatus
  153. );
  154. HRESULT SetSmtpStatusCode(
  155. [in] DWORD dwSmtpStatus
  156. );
  157. HRESULT SetProtocolErrorFlag(
  158. [in] BOOL fProtocolError
  159. );
  160. // Async completion callback
  161. HRESULT NotifyAsyncCompletion(
  162. [in] HRESULT hrResult
  163. );
  164. HRESULT SetCallback(
  165. [in] ISmtpInCallbackSink * pICallback
  166. );
  167. };
  168. [
  169. object,
  170. local,
  171. uuid(5e4fc9da-3e3b-11d3-88f1-00c04fa35b86),
  172. helpstring("ISmtpInCallbackContext Interface"),
  173. pointer_default(unique)
  174. ]
  175. interface ISmtpInCallbackContext : IUnknown
  176. {
  177. // Query methods
  178. HRESULT QueryBlob(
  179. [out] BYTE **ppbBlob,
  180. [in,out] DWORD *pdwSize
  181. );
  182. HRESULT QueryBlobSize(
  183. [out] DWORD *pdwSize
  184. );
  185. // Set methods
  186. HRESULT SetResponse(
  187. [in,string] LPSTR pszResponse,
  188. [in] DWORD dwSize
  189. );
  190. HRESULT AppendResponse(
  191. [in,string] LPSTR pszResponse,
  192. [in] DWORD dwSize
  193. );
  194. HRESULT SetCommandStatus(
  195. [in] DWORD dwCommandStatus
  196. );
  197. HRESULT SetSmtpStatusCode(
  198. [in] DWORD dwSmtpStatus
  199. );
  200. };
  201. [
  202. object,
  203. local,
  204. uuid(c849b5f2-0a80-11d2-aa67-00c04fa35b82),
  205. helpstring("ISmtpOutCommandContext Interface"),
  206. pointer_default(unique)
  207. ]
  208. interface ISmtpOutCommandContext : IUnknown
  209. {
  210. // Query methods
  211. HRESULT QueryCommand(
  212. [out,size_is(*pdwSize)] LPSTR pszCommand,
  213. [in,out] DWORD *pdwSize
  214. );
  215. HRESULT QueryCommandKeyword(
  216. [out,size_is(*pdwSize)] LPSTR pszKeyword,
  217. [in,out] DWORD *pdwSize
  218. );
  219. HRESULT QueryNativeCommand(
  220. [out,size_is(*pdwSize)] LPSTR pszNativeCommand,
  221. [in,out] DWORD *pdwSize
  222. );
  223. HRESULT QueryCommandSize(
  224. [out] DWORD *pdwSize
  225. );
  226. HRESULT QueryCommandKeywordSize(
  227. [out] DWORD *pdwSize
  228. );
  229. HRESULT QueryNativeCommandSize(
  230. [out] DWORD *pdwSize
  231. );
  232. HRESULT QueryCurrentRecipientIndex(
  233. [out] DWORD *pdwRecipientIndex
  234. );
  235. HRESULT QueryCommandStatus(
  236. [out] DWORD *pdwCommandStatus
  237. );
  238. // Set methods
  239. HRESULT SetCommand(
  240. [in,string] LPSTR szCommand,
  241. [in] DWORD dwSize
  242. );
  243. HRESULT AppendCommand(
  244. [in,string] LPSTR szCommand,
  245. [in] DWORD dwSize
  246. );
  247. HRESULT SetCommandStatus(
  248. [in] DWORD dwCommandStatus
  249. );
  250. // Async completion callback
  251. HRESULT NotifyAsyncCompletion(
  252. [in] HRESULT hrResult
  253. );
  254. HRESULT SetBlob(
  255. [in] BYTE *pbBlob,
  256. [in] DWORD dwSize
  257. );
  258. };
  259. [
  260. object,
  261. local,
  262. uuid(e38f9ad2-0a82-11d2-aa67-00c04fa35b82),
  263. helpstring("ISmtpServerResponseContext Interface"),
  264. pointer_default(unique)
  265. ]
  266. interface ISmtpServerResponseContext : IUnknown
  267. {
  268. // Query methods
  269. HRESULT QueryCommand(
  270. [out,size_is(*pdwSize)] LPSTR pszCommand,
  271. [in,out] DWORD *pdwSize
  272. );
  273. HRESULT QueryCommandKeyword(
  274. [out,size_is(*pdwSize)] LPSTR pszKeyword,
  275. [in,out] DWORD *pdwSize
  276. );
  277. HRESULT QueryResponse(
  278. [out,size_is(*pdwSize)] LPSTR pszResponse,
  279. [in,out] DWORD *pdwSize
  280. );
  281. HRESULT QueryCommandSize(
  282. [out] DWORD *pdwSize
  283. );
  284. HRESULT QueryCommandKeywordSize(
  285. [out] DWORD *pdwSize
  286. );
  287. HRESULT QueryResponseSize(
  288. [out] DWORD *pdwSize
  289. );
  290. HRESULT QuerySmtpStatusCode(
  291. [out] DWORD *pdwSmtpStatus
  292. );
  293. HRESULT QueryResponseStatus(
  294. [out] DWORD *pdwResponseStatus
  295. );
  296. HRESULT QueryPipelinedFlag(
  297. [out] BOOL *pfResponseIsPipelined
  298. );
  299. HRESULT QueryNextEventState(
  300. [out] DWORD *pdwNextState
  301. );
  302. // Set methods
  303. HRESULT SetResponseStatus(
  304. [in] DWORD dwResponseStatus
  305. );
  306. HRESULT SetNextEventState(
  307. [in] DWORD dwNextState
  308. );
  309. // Async completion callback
  310. HRESULT NotifyAsyncCompletion(
  311. [in] HRESULT hrResult
  312. );
  313. };
  314. // =============================================================
  315. //
  316. // Inbound Protocol Event Sink Shape
  317. //
  318. [
  319. object,
  320. uuid(b2d42a0e-0d5f-11d2-aa68-00c04fa35b82),
  321. helpstring("ISmtpInCommandSink Interface"),
  322. pointer_default(unique)
  323. ]
  324. interface ISmtpInCommandSink : IUnknown
  325. {
  326. [helpstring("OnSmtpInCommand method")]
  327. HRESULT OnSmtpInCommand(
  328. [in] IUnknown *pServer,
  329. [in] IUnknown *pSession,
  330. [in] IMailMsgProperties *pMsg,
  331. [in] ISmtpInCommandContext *pContext
  332. );
  333. };
  334. // =============================================================
  335. //
  336. // Outbound Command Generation Protocol Event Sink Shape
  337. //
  338. [
  339. object,
  340. uuid(cfdbb9b0-0ca0-11d2-aa68-00c04fa35b82),
  341. helpstring("ISmtpOutCommandSink Interface"),
  342. pointer_default(unique)
  343. ]
  344. interface ISmtpOutCommandSink : IUnknown
  345. {
  346. [helpstring("OnSmtpOutCommand method")]
  347. HRESULT OnSmtpOutCommand(
  348. [in] IUnknown *pServer,
  349. [in] IUnknown *pSession,
  350. [in] IMailMsgProperties *pMsg,
  351. [in] ISmtpOutCommandContext *pContext
  352. );
  353. };
  354. // =============================================================
  355. //
  356. // Server Response Protocol Event Sink Shape
  357. //
  358. [
  359. object,
  360. uuid(d7e10222-0ca1-11d2-aa68-00c04fa35b82),
  361. helpstring("ISmtpServerResponseSink Interface"),
  362. pointer_default(unique)
  363. ]
  364. interface ISmtpServerResponseSink : IUnknown
  365. {
  366. [helpstring("OnSmtpServerResponse method")]
  367. HRESULT OnSmtpServerResponse(
  368. [in] IUnknown *pServer,
  369. [in] IUnknown *pSession,
  370. [in] IMailMsgProperties *pMsg,
  371. [in] ISmtpServerResponseContext *pContext
  372. );
  373. };
  374. // =============================================================
  375. //
  376. // Inbound Protocol Event Callback Sink Shape
  377. //
  378. [
  379. object,
  380. uuid(0012b624-3e3c-11d3-88f1-00c04fa35b86),
  381. helpstring("ISmtpInCallbackSink Interface"),
  382. pointer_default(unique)
  383. ]
  384. interface ISmtpInCallbackSink : IUnknown
  385. {
  386. [helpstring("OnSmtpInCallback method")]
  387. HRESULT OnSmtpInCallback(
  388. [in] IUnknown *pServer,
  389. [in] IUnknown *pSession,
  390. [in] IMailMsgProperties *pMsg,
  391. [in] ISmtpInCallbackContext *pContext
  392. );
  393. };
  394. //+------------------------------------------------------------
  395. //
  396. // The SMTP Mail Transport interfaces:
  397. //
  398. //-------------------------------------------------------------
  399. //
  400. // The default processing priority of the transport events:
  401. //
  402. cpp_quote("#define SMTP_TRANSPORT_DEFAULT_PRIORITY 16384")
  403. //+------------------------------------------------------------
  404. //
  405. // Interface: IMailTransportNotify
  406. //
  407. // Synopsis: Used for async events
  408. //
  409. //
  410. //-------------------------------------------------------------
  411. [
  412. object,
  413. uuid(6E1CAA77-FCD4-11d1-9DF9-00C04FA322BA),
  414. helpstring("IMailTransportNotify Interface"),
  415. pointer_default(unique)
  416. ]
  417. interface IMailTransportNotify : IUnknown
  418. {
  419. [local]
  420. HRESULT Notify(
  421. [in] HRESULT hrCompletion,
  422. [in] PVOID pvContext);
  423. };
  424. //+------------------------------------------------------------
  425. //
  426. // Interface: IMailTransportSubmission
  427. //
  428. // Synopsis: Used for the SMTP_MAILTRANSPORT_ONMESSAGESUBMISSION event
  429. //
  430. //
  431. //-------------------------------------------------------------
  432. [
  433. object,
  434. uuid(CE681916-FF14-11d1-9DFB-00C04FA322BA),
  435. helpstring("IMailTransportSubmission Interface"),
  436. pointer_default(unique)
  437. ]
  438. interface IMailTransportSubmission : IUnknown
  439. {
  440. [local]
  441. HRESULT OnMessageSubmission(
  442. [in] IMailMsgProperties *pIMailMsg,
  443. [in] IMailTransportNotify *pINotify,
  444. [in] PVOID pvNotifyContext);
  445. };
  446. //+------------------------------------------------------------
  447. //
  448. // Interface: IMailTransportOnPreCategorize
  449. //
  450. // Synopsis: Used for the SMTP_MAILTRANSPORT_PRECATEGORIZE event
  451. //
  452. //
  453. //-------------------------------------------------------------
  454. [
  455. object,
  456. uuid(A3ACFB0E-83FF-11d2-9E14-00C04FA322BA),
  457. helpstring("IMailTransportOnPreCategorize Interface"),
  458. pointer_default(unique)
  459. ]
  460. interface IMailTransportOnPreCategorize : IUnknown
  461. {
  462. [local]
  463. HRESULT OnSyncMessagePreCategorize(
  464. [in] IMailMsgProperties *pIMailMsg,
  465. [in] IMailTransportNotify *pINotify,
  466. [in] PVOID pvNotifyContext);
  467. };
  468. //+------------------------------------------------------------
  469. //
  470. // Interface: IMailTransportOnPostCategorize
  471. //
  472. // Synopsis: Used for the SMTP_MAILTRANSPORT_POSTCATEGORIZE event
  473. //
  474. //
  475. //-------------------------------------------------------------
  476. [
  477. object,
  478. uuid(76719653-05A6-11d2-9DFD-00C04FA322BA),
  479. helpstring("IMailTransportOnPostCategorize Interface"),
  480. pointer_default(unique)
  481. ]
  482. interface IMailTransportOnPostCategorize : IUnknown
  483. {
  484. [local]
  485. HRESULT OnMessagePostCategorize(
  486. [in] IMailMsgProperties *pIMailMsg,
  487. [in] IMailTransportNotify *pINotify,
  488. [in] PVOID pvNotifyContext);
  489. };
  490. cpp_quote("#define RESET_NEXT_HOPS 0")
  491. cpp_quote("#define RESET_MESSAGE_TYPES 1")
  492. //+------------------------------------------------------------
  493. //
  494. // Interface: IMailTransportRouterReset
  495. //
  496. // Synopsis: System implemented interface for resetting routes
  497. //
  498. //
  499. //-------------------------------------------------------------
  500. [
  501. object,
  502. uuid(A928AD12-1610-11d2-9E02-00C04FA322BA),
  503. helpstring("IMailTransportRouterReset Interface"),
  504. pointer_default(unique)
  505. ]
  506. interface IMailTransportRouterReset : IUnknown
  507. {
  508. HRESULT ResetRoutes(
  509. [in] DWORD dwResetType);
  510. };
  511. //+------------------------------------------------------------
  512. //
  513. // Interface: IMailTransportSetRouterReset
  514. //
  515. // Synopsis: Used for the SMTP_MAILTRANSPORT_ON_SET_ROUTER_RESET event
  516. //
  517. //
  518. //-------------------------------------------------------------
  519. [
  520. object,
  521. uuid(A928AD11-1610-11d2-9E02-00C04FA322BA),
  522. helpstring("IMailTransportSetRouterReset Interface"),
  523. pointer_default(unique)
  524. ]
  525. interface IMailTransportSetRouterReset : IUnknown
  526. {
  527. HRESULT RegisterResetInterface(
  528. [in] DWORD dwVirtualServerID,
  529. [in] IMailTransportRouterReset *pIRouterReset);
  530. };
  531. //+------------------------------------------------------------
  532. //
  533. // Interface: IMessageRouter
  534. //
  535. // Synopsis: Sink supplied interface
  536. //
  537. //
  538. //-------------------------------------------------------------
  539. [
  540. object,
  541. uuid(A928AD14-1610-11d2-9E02-00C04FA322BA),
  542. helpstring("IMessageRouter Interface"),
  543. pointer_default(unique)
  544. ]
  545. interface IMessageRouter : IUnknown
  546. {
  547. [local]
  548. GUID GetTransportSinkID();
  549. HRESULT GetMessageType(
  550. [in] IMailMsgProperties *pIMailMsg,
  551. [out] DWORD *pdwMessageType);
  552. HRESULT ReleaseMessageType(
  553. [in] DWORD dwMessageType,
  554. [in] DWORD dwReleaseCount);
  555. [local]
  556. HRESULT GetNextHop(
  557. [in] LPSTR pszDestinationAddressType,
  558. [in] LPSTR pszDestinationAddress,
  559. [in] DWORD dwMessageType,
  560. [out] LPSTR *ppszRouteAddressType,
  561. [out] LPSTR *ppszRouteAddress,
  562. [out] DWORD *pdwScheduleID,
  563. [out] LPSTR *ppszRouteAddressClass,
  564. [out] LPSTR *ppszConnectorName,
  565. [out] DWORD *pdwNextHopType);
  566. [local]
  567. HRESULT GetNextHopFree(
  568. [in] LPSTR pszDestinationAddressType,
  569. [in] LPSTR pszDestinationAddress,
  570. [in] LPSTR pszConnectorName,
  571. [in] LPSTR pszRouteAddressType,
  572. [in] LPSTR pszRouteAddress,
  573. [in] LPSTR pszRouteAddressClass);
  574. HRESULT ConnectionFailed(
  575. [in, string] LPSTR pszConnectorName);
  576. };
  577. //Some standard RouteAddressTypes that might be returned by GetNextHop
  578. const LPCSTR MTI_ROUTING_ADDRESS_TYPE_NULL = NULL;
  579. const LPCSTR MTI_ROUTING_ADDRESS_TYPE_SMTP = "SMTP";
  580. const LPCSTR MTI_ROUTING_ADDRESS_TYPE_X400 = "X400";
  581. const LPCSTR MTI_ROUTING_ADDRESS_TYPE_X500 = "X500";
  582. //---[ NEXT_HOP_TYPE ]---------------------------------------------------------
  583. //
  584. //
  585. // Description:
  586. // Enum for the possible next hop types
  587. //
  588. //-----------------------------------------------------------------------------
  589. typedef [v1_enum] enum {
  590. MTI_NEXT_HOP_TYPE_SAME_VIRTUAL_SERVER,
  591. MTI_NEXT_HOP_TYPE_PEER_SMTP1_BYPASS_CONFIG_LOOKUP,
  592. MTI_NEXT_HOP_TYPE_EXTERNAL_SMTP,
  593. MTI_NEXT_HOP_TYPE_UNREACHABLE,
  594. MTI_NEXT_HOP_TYPE_CURRENTLY_UNREACHABLE,
  595. MTI_NEXT_HOP_TYPE_PEER_SMTP2_BYPASS_CONFIG_LOOKUP
  596. } MTI_NEXT_HOP_TYPE, *PMTI_NEXT_HOP_TYPE;
  597. // #defines for old names for these values
  598. #define MTI_NEXT_HOP_TYPE_REMOTE \
  599. (MTI_NEXT_HOP_TYPE_PEER_SMTP1_BYPASS_CONFIG_LOOKUP)
  600. #define MTI_NEXT_HOP_TYPE_RESERVED \
  601. (MTI_NEXT_HOP_TYPE_EXTERNAL_SMTP)
  602. //+------------------------------------------------------------
  603. //
  604. // Interface: IMailTransportRouterSetLinkState
  605. //
  606. // Synopsis: System implemented interface for allowing a
  607. // routing sink to update the link state for features such
  608. // as:
  609. // - Scheduled Connections
  610. // - Scheduled Commands
  611. //
  612. // If LINK_STATE_SCHED_ENABLED is being unset... a next
  613. // scheduled connection time should be returned.
  614. //
  615. //
  616. //-------------------------------------------------------------
  617. [
  618. object,
  619. uuid(B870CE28-A755-11d2-A6A9-00C04FA3490A),
  620. helpstring("IMailTransportRouterSetLinkState Interface"),
  621. pointer_default(unique)
  622. ]
  623. interface IMailTransportRouterSetLinkState : IUnknown
  624. {
  625. HRESULT SetLinkState(
  626. [in] LPSTR szLinkDomainName,
  627. [in] GUID guidRouterGUID,
  628. [in] DWORD dwScheduleID,
  629. [in] LPSTR szConnectorName,
  630. [in] DWORD dwSetLinkState,
  631. [in] DWORD dwUnsetLinkState,
  632. [in] FILETIME *pftNextScheduled,
  633. [in] IMessageRouter *pMessageRouter);
  634. };
  635. //+------------------------------------------------------------
  636. //
  637. // Interface: IMessageRouterLinkStateNotification
  638. //
  639. // Synopsis: Sink supplied interface that is used for notifying
  640. // the routing sink of link state on connection acks.
  641. //
  642. // If LINK_STATE_SCHED_ENABLED is being unset... a next
  643. // scheduled connection time should be returned.
  644. //
  645. //
  646. //-------------------------------------------------------------
  647. [
  648. object,
  649. uuid(B870CE29-A755-11d2-A6A9-00C04FA3490A),
  650. helpstring("IMessageRouterLinkStateNotification Interface"),
  651. pointer_default(unique)
  652. ]
  653. interface IMessageRouterLinkStateNotification : IUnknown
  654. {
  655. HRESULT LinkStateNotify(
  656. [in] LPSTR szLinkDomainName,
  657. [in] GUID guidRouterGUID,
  658. [in] DWORD dwScheduleID,
  659. [in] LPSTR szConnectorName,
  660. [in] DWORD dwLinkState,
  661. [in] DWORD cConsecutiveFailures,
  662. [in, out] FILETIME *pftNextScheduled,
  663. [out] DWORD *pdwSetLinkState,
  664. [out] DWORD *pdwUnsetLinkState);
  665. };
  666. //---[ eLinkInfoFlags ]--------------------------------------------------------
  667. //
  668. //
  669. // Description: Flags used to describe boolean per *link* state. Used to
  670. // decide if it is an appropriate time to make a connection. Event sinks
  671. // can set and unset these flags to influence the connection manager.
  672. //
  673. //-----------------------------------------------------------------------------
  674. typedef [v1_enum] enum
  675. {
  676. LINK_STATE_NO_ACTION = 0x00000000, //NULL op... setting/unsetting this has no effect on link state
  677. LINK_STATE_RETRY_ENABLED = 0x00000001, //If NOT set, link is pending retry
  678. LINK_STATE_SCHED_ENABLED = 0x00000002, //If NOT set, link is pending scheduled connection
  679. LINK_STATE_CMD_ENABLED = 0x00000004, //If set, link should be activated to send a command
  680. LINK_STATE_ADMIN_HALT = 0x00000008, //If set, admin has request no connections be made
  681. LINK_STATE_ADMIN_FORCE_CONN = 0x00000010, //Admin has requested that a connection be made now
  682. LINK_STATE_CONNECT_IF_NO_MSGS = 0x00000020, //Connect even if there are no messages. Link will not be deleted while this is set.
  683. LINK_STATE_DO_NOT_DELETE = 0x00000040, //Routing is interested in this link... it should not be deleted by the transport.
  684. LINK_STATE_CREATE_IF_NECESSARY = 0x00000080, //Create a new link if one doesn't exist
  685. LINK_STATE_LINK_NO_LONGER_USED = 0x00000100, //Set when SMTP is done with link
  686. LINK_STATE_TYPE_INTERNAL_SMTP = 0x00000200,
  687. LINK_STATE_TYPE_EXTERNAL_SMTP = 0x00000400,
  688. LINK_STATE_DO_NOT_DELETE_UNTIL_NEXT_NOTIFY = 0x00000800,
  689. LINK_STATE_RESERVED = 0xFFFF0000, //Reserved for internal use
  690. } eLinkStateFlags;
  691. //+------------------------------------------------------------
  692. //
  693. // Interface: IMailTransportRoutingEngine
  694. //
  695. // Synopsis: Used for the SMTP_MAILTRANSPORT_ON_GET_ROUTER_FOR_MESSAGE event
  696. //
  697. //
  698. //-------------------------------------------------------------
  699. //
  700. // Specific error code(s) that can be returned from GetMessageRouter
  701. //
  702. cpp_quote("#define ROUTER_E_NOTINTERESTED MAKE_HRESULT(SEVERITY_ERROR,FACILITY_ITF,0x1000)")
  703. [
  704. object,
  705. uuid(A928AD13-1610-11d2-9E02-00C04FA322BA),
  706. helpstring("IMailTransportRoutingEngine Interface"),
  707. pointer_default(unique)
  708. ]
  709. interface IMailTransportRoutingEngine : IUnknown
  710. {
  711. [local]
  712. HRESULT GetMessageRouter(
  713. [in] IMailMsgProperties *pIMailMsg,
  714. [in] IMessageRouter *pICurrentMessageRouter,
  715. [out] IMessageRouter **ppIMessageRouter);
  716. };
  717. cpp_quote("#define MTE_QUEUED_OUTBOUND 1010")
  718. cpp_quote("#define MTE_TRANSFERRED_OUTBOUND 1011")
  719. cpp_quote("#define MTE_RECEIVED_INBOUND 1012")
  720. cpp_quote("#define MTE_TRANSFERRED_INBOUND 1013")
  721. cpp_quote("#define MTE_MESSAGE_REROUTED 1014")
  722. cpp_quote("#define MTE_REPORT_TRANSFERRED_IN 1015")
  723. cpp_quote("#define MTE_REPORT_TRANSFERRED_OUT 1016")
  724. cpp_quote("#define MTE_REPORT_GENERATED 1017")
  725. cpp_quote("#define MTE_REPORT_ABSORBED 1018")
  726. cpp_quote("#define MTE_SUBMIT_MESSAGE_TO_AQ 1019")
  727. cpp_quote("#define MTE_BEGIN_OUTBOUND_TRANSFER 1020")
  728. cpp_quote("#define MTE_BADMAIL 1021")
  729. cpp_quote("#define MTE_AQ_FAILURE 1022")
  730. cpp_quote("#define MTE_LOCAL_DELIVERY 1023")
  731. cpp_quote("#define MTE_SUBMIT_MESSAGE_TO_CAT 1024")
  732. cpp_quote("#define MTE_BEGIN_SUBMIT_MESSAGE 1025")
  733. cpp_quote("#define MTE_AQ_FAILED_MESSAGE 1026")
  734. cpp_quote("#define MTE_NDR_ALL 1030")
  735. cpp_quote("#define MTE_END_OUTBOUND_TRANSFER 1031")
  736. [
  737. helpstring("Interface For Message Tracking."),
  738. local,
  739. object,
  740. pointer_default(unique),
  741. uuid(1bc3580e-7e4f-11d2-94f4-00C04f79f1d6)
  742. ]
  743. interface IMsgTrackLog : IUnknown
  744. {
  745. HRESULT OnSyncLogMsgTrackInfo(
  746. [in] IUnknown *pIServer,
  747. [in] IMailMsgProperties *pIMailMsgProp,
  748. [in] LPMSG_TRACK_INFO pMsgTrackInfo);
  749. };
  750. [
  751. helpstring("Interface For Enumerating Resolver Records."),
  752. local,
  753. object,
  754. pointer_default(unique),
  755. uuid(e5b89c52-8e0b-11d2-94f6-00C04f79f1d6)
  756. ]
  757. interface IDnsResolverRecord : IUnknown
  758. {
  759. HRESULT GetItem( [in] ULONG cIndex, [out] LPSTR *ppszHostName, [out] DWORD *pAddr );
  760. HRESULT Count( [out] DWORD *pcRecords );
  761. };
  762. [
  763. helpstring("Interface For returning status from DNS resolver sink."),
  764. local,
  765. object,
  766. pointer_default(unique),
  767. uuid(4e60bfad-a179-47AC-8961-c7c1f0785ac1)
  768. ]
  769. interface IDnsStatus : IUnknown
  770. {
  771. HRESULT GetDnsStatus();
  772. };
  773. [
  774. helpstring("Interface For Getting Resolver Records."),
  775. local,
  776. object,
  777. pointer_default(unique),
  778. uuid(d95a4d0c-8e06-11d2-94f6-00C04f79f1d6)
  779. ]
  780. interface IDnsResolverRecordSink : IUnknown
  781. {
  782. HRESULT OnSyncGetResolverRecord( [in] LPSTR pszHostName,
  783. [in] LPSTR pszInstanceFQDN,
  784. [in] DWORD dwVirtualServerId,
  785. [out] IDnsResolverRecord **ppDnsResolverRecord);
  786. };
  787. [
  788. helpstring("MaxMsgSize Exceeded event interface."),
  789. local,
  790. object,
  791. pointer_default(unique),
  792. uuid(b997f192-a67d-11d2-94f7-00C04f79f1d6)
  793. ]
  794. interface ISmtpMaxMsgSize : IUnknown
  795. {
  796. HRESULT OnSyncMaxMsgSize( [in] IUnknown *pIUnknown,
  797. [in] IMailMsgProperties *pIMailMsgProp,
  798. [out] BOOL *pfShouldImposeLimit );
  799. };
  800. [
  801. helpstring("Log event interface."),
  802. local,
  803. object,
  804. pointer_default(unique),
  805. uuid(35bc9ad7-7aa5-43ee-a0ab-94e1d6be99e5)
  806. ]
  807. interface ISmtpLog : IUnknown
  808. {
  809. HRESULT OnSyncLog(
  810. [in] LPSMTP_LOG_EVENT_INFO pLogEventInfo);
  811. };
  812. [
  813. helpstring("Get Aux Domain Info Flags event interface."),
  814. local,
  815. object,
  816. pointer_default(unique),
  817. uuid(d038c9da-4977-491d-8b0e-97f2e546c35a)
  818. ]
  819. interface ISmtpGetAuxDomainInfoFlags : IUnknown
  820. {
  821. HRESULT OnGetAuxDomainInfoFlags(
  822. [in] IUnknown *pIServer,
  823. [in] LPCSTR pszDomainName,
  824. [out] DWORD *pdwDomainInfoFlags );
  825. };
  826. //+------------------------------------------------------------
  827. //
  828. // The Categorizer event interfaces:
  829. //
  830. //-------------------------------------------------------------
  831. interface ICategorizerListResolve;
  832. interface ICategorizerItemAttributes;
  833. interface ICategorizerMailMsgs;
  834. interface ICategorizerItem;
  835. interface ICategorizerDomainInfo;
  836. interface ISMTPCategorizer;
  837. interface ISMTPCategorizerCompletion;
  838. interface ISMTPCategorizerDLCompletion;
  839. //
  840. // A structure and definitions to handle the configuration of
  841. // a virtual server (for categorizer)
  842. //
  843. typedef [v1_enum] enum
  844. {
  845. CCAT_CONFIG_INFO_FLAGS = 0x0001,
  846. CCAT_CONFIG_INFO_ROUTINGTYPE = 0x0002,
  847. CCAT_CONFIG_INFO_BINDDOMAIN = 0x0004,
  848. CCAT_CONFIG_INFO_USER = 0x0008,
  849. CCAT_CONFIG_INFO_PASSWORD = 0x0010,
  850. CCAT_CONFIG_INFO_BINDTYPE = 0x0020,
  851. CCAT_CONFIG_INFO_SCHEMATYPE = 0x0040,
  852. CCAT_CONFIG_INFO_HOST = 0x0080,
  853. CCAT_CONFIG_INFO_NAMINGCONTEXT = 0x0100,
  854. CCAT_CONFIG_INFO_DEFAULTDOMAIN = 0x0200,
  855. CCAT_CONFIG_INFO_PORT = 0x0400,
  856. CCAT_CONFIG_INFO_ISMTPSERVER = 0x0800,
  857. CCAT_CONFIG_INFO_IDOMAININFO = 0x1000,
  858. CCAT_CONFIG_INFO_ENABLE = 0x2000,
  859. CCAT_CONFIG_INFO_DEFAULT = 0x4000,
  860. CCAT_CONFIG_INFO_VSID = 0x8000,
  861. CCAT_CONFIG_INFO_ALL = 0xFFFF
  862. } eCatConfigInfoFlags;
  863. typedef struct _tagCCatConfigInfo {
  864. DWORD dwCCatConfigInfoFlags; //Flags describing which fields
  865. //are valid
  866. DWORD dwEnable;
  867. DWORD dwCatFlags;
  868. LPSTR pszRoutingType;
  869. LPSTR pszBindDomain;
  870. LPSTR pszUser;
  871. LPSTR pszPassword;
  872. LPSTR pszBindType;
  873. LPSTR pszSchemaType;
  874. LPSTR pszHost;
  875. LPSTR pszNamingContext;
  876. LPSTR pszDefaultDomain;
  877. DWORD dwPort;
  878. ISMTPServer *pISMTPServer;
  879. ICategorizerDomainInfo *pIDomainInfo;
  880. DWORD dwVirtualServerID;
  881. } CCATCONFIGINFO, *PCCATCONFIGINFO;
  882. typedef [v1_enum] enum _CAT_ADDRESS_TYPE {
  883. CAT_SMTP = 0, // SMTP address type
  884. CAT_X500 = 1, // X500 address type (ex: "/DC=blah/dc=...")
  885. CAT_X400 = 2, // X400 address type
  886. CAT_DN = 3, // Distinguished Name
  887. CAT_LEGACYEXDN = 4, // LegacyExchangeDN attribute
  888. CAT_CUSTOMTYPE = 5, // Foreign address type
  889. CAT_UNKNOWNTYPE = 6, // Not a valid input value
  890. } CAT_ADDRESS_TYPE;
  891. //+------------------------------------------------------------
  892. //
  893. // Interface: ICategorizerProperties
  894. //
  895. // Synopsis: Property setting/retrieval interface
  896. //
  897. //
  898. //-------------------------------------------------------------
  899. [
  900. local,
  901. object,
  902. uuid(96BF3199-79D8-11d2-9E11-00C04FA322BA),
  903. helpstring("ICategorizerProperties Interface"),
  904. pointer_default(unique)
  905. ]
  906. interface ICategorizerProperties : IUnknown
  907. {
  908. HRESULT GetStringA(
  909. [in] DWORD dwPropId,
  910. [in] DWORD dwcchValue,
  911. [out, size_is(dwcchValue)] LPSTR pszValue);
  912. HRESULT PutStringA(
  913. [in] DWORD dwPropId,
  914. [in, unique] LPSTR pszValue);
  915. HRESULT GetDWORD(
  916. [in] DWORD dwPropId,
  917. [out] DWORD *pdwValue);
  918. HRESULT PutDWORD(
  919. [in] DWORD dwPropId,
  920. [in] DWORD dwValue);
  921. HRESULT GetHRESULT(
  922. [in] DWORD dwPropId,
  923. [out] HRESULT *phrValue);
  924. HRESULT PutHRESULT(
  925. [in] DWORD dwPropId,
  926. [in] HRESULT hrValue);
  927. HRESULT GetBool(
  928. [in] DWORD dwPropId,
  929. [out] BOOL *pfValue);
  930. HRESULT PutBool(
  931. [in] DWORD dwPropId,
  932. [in] BOOL fValue);
  933. HRESULT GetPVoid(
  934. [in] DWORD dwPropId,
  935. [out] PVOID *pvValue);
  936. HRESULT PutPVoid(
  937. [in] DWORD dwPropId,
  938. [in] PVOID pvValue);
  939. HRESULT GetIUnknown(
  940. [in] DWORD dwPropId,
  941. [out] IUnknown **pUnknown);
  942. HRESULT PutIUnknown(
  943. [in] DWORD dwPropId,
  944. [in] IUnknown *pUnknown);
  945. HRESULT GetIMailMsgProperties(
  946. [in] DWORD dwPropId,
  947. [out] IMailMsgProperties **ppIMsg);
  948. HRESULT PutIMailMsgProperties(
  949. [in] DWORD dwPropId,
  950. [in] IMailMsgProperties *pIMsg);
  951. HRESULT GetIMailMsgRecipientsAdd(
  952. [in] DWORD dwPropId,
  953. [out] IMailMsgRecipientsAdd **ppIMsgRecipientsAdd);
  954. HRESULT PutIMailMsgRecipientsAdd(
  955. [in] DWORD dwPropId,
  956. [in] IMailMsgRecipientsAdd *pIMsgRecipientsAdd);
  957. HRESULT GetICategorizerItemAttributes(
  958. [in] DWORD dwPropId,
  959. [out] ICategorizerItemAttributes **ppICategorizerItemAttributes);
  960. HRESULT PutICategorizerItemAttributes(
  961. [in] DWORD dwPropId,
  962. [in] ICategorizerItemAttributes *pICategorizerItemAttributes);
  963. HRESULT GetICategorizerListResolve(
  964. [in] DWORD dwPropId,
  965. [out] ICategorizerListResolve **ppICategorizerListResolve);
  966. HRESULT PutICategorizerListResolve(
  967. [in] DWORD dwPropId,
  968. [in] ICategorizerListResolve *pICategorizerListResolve);
  969. HRESULT GetICategorizerMailMsgs(
  970. [in] DWORD dwPropId,
  971. [out] ICategorizerMailMsgs **ppICategorizerMailMsgs);
  972. HRESULT PutICategorizerMailMsgs(
  973. [in] DWORD dwPropId,
  974. [in] ICategorizerMailMsgs *pICategorizerMailMsgs);
  975. HRESULT GetICategorizerItem(
  976. [in] DWORD dwPropId,
  977. [out] ICategorizerItem **ppICategorizerItem);
  978. HRESULT PutICategorizerItem(
  979. [in] DWORD dwPropId,
  980. [in] ICategorizerItem *pICategorizerItem);
  981. HRESULT UnSetPropId(
  982. [in] DWORD dwPropId);
  983. };
  984. //+------------------------------------------------------------
  985. //
  986. // Interface: ICategorizerParameters
  987. //
  988. // Synopsis: Holds data concerning attribute names for the schema in use
  989. //
  990. //
  991. //-------------------------------------------------------------
  992. typedef [v1_enum] enum
  993. {
  994. DSPARAMETER_LDAPHOST = 0,
  995. DSPARAMETER_LDAPBINDTYPE,
  996. DSPARAMETER_LDAPDOMAIN,
  997. DSPARAMETER_LDAPACCOUNT,
  998. DSPARAMETER_LDAPPASSWORD,
  999. DSPARAMETER_LDAPNAMINGCONTEXT,
  1000. DSPARAMETER_LDAPPORT,
  1001. DSPARAMETER_BATCHINGLIMIT,
  1002. DSPARAMETER_SEARCHATTRIBUTE_SMTP,
  1003. DSPARAMETER_SEARCHFILTER_SMTP,
  1004. DSPARAMETER_SEARCHATTRIBUTE_X500,
  1005. DSPARAMETER_SEARCHFILTER_X500,
  1006. DSPARAMETER_SEARCHATTRIBUTE_X400,
  1007. DSPARAMETER_SEARCHFILTER_X400,
  1008. DSPARAMETER_SEARCHATTRIBUTE_LEGACYEXDN,
  1009. DSPARAMETER_SEARCHFILTER_LEGACYEXDN,
  1010. DSPARAMETER_SEARCHATTRIBUTE_RDN,
  1011. DSPARAMETER_SEARCHFILTER_RDN,
  1012. DSPARAMETER_SEARCHATTRIBUTE_DN,
  1013. DSPARAMETER_SEARCHFILTER_DN,
  1014. DSPARAMETER_SEARCHATTRIBUTE_FOREIGNADDRESS,
  1015. DSPARAMETER_SEARCHFILTER_FOREIGNADDRESS,
  1016. DSPARAMETER_ATTRIBUTE_OBJECTCLASS,
  1017. DSPARAMETER_ATTRIBUTE_DEFAULT_SMTP,
  1018. DSPARAMETER_ATTRIBUTE_DEFAULT_X500,
  1019. DSPARAMETER_ATTRIBUTE_DEFAULT_X400,
  1020. DSPARAMETER_ATTRIBUTE_DEFAULT_DN,
  1021. DSPARAMETER_ATTRIBUTE_DEFAULT_LEGACYEXDN,
  1022. DSPARAMETER_ATTRIBUTE_FORWARD_SMTP,
  1023. DSPARAMETER_ATTRIBUTE_DL_MEMBERS,
  1024. DSPARAMETER_ATTRIBUTE_DL_DYNAMICFILTER,
  1025. DSPARAMETER_ATTRIBUTE_DL_DYNAMICBASEDN,
  1026. DSPARAMETER_OBJECTCLASS_USER,
  1027. DSPARAMETER_OBJECTCLASS_DL_X500,
  1028. DSPARAMETER_OBJECTCLASS_DL_SMTP,
  1029. DSPARAMETER_OBJECTCLASS_DL_DYNAMIC,
  1030. DSPARAMETER_ENDENUMMESS,
  1031. DSPARAMETER_INVALID
  1032. } eDSPARAMETER;
  1033. [
  1034. object,
  1035. local,
  1036. uuid(86F9DA7B-EB6E-11d1-9DF3-00C04FA322BA),
  1037. helpstring("ICategorizerParameters Interface"),
  1038. pointer_default(unique)
  1039. ]
  1040. interface ICategorizerParameters : IUnknown
  1041. {
  1042. HRESULT GetDSParameterA(
  1043. [in] DWORD dwDSParameter,
  1044. [out] LPSTR *ppszValue);
  1045. HRESULT SetDSParameterA(
  1046. [in] DWORD dwDSParameter,
  1047. [in, unique] LPCSTR pszValue);
  1048. HRESULT RequestAttributeA(
  1049. [in, unique] LPCSTR pszName);
  1050. HRESULT GetAllAttributes(
  1051. [out] LPSTR **prgszAllAttributes);
  1052. HRESULT ReserveICatItemPropIds(
  1053. [in] DWORD dwNumPropIdsRequested,
  1054. [out] DWORD *pdwBeginningPropId);
  1055. HRESULT ReserveICatListResolvePropIds(
  1056. [in] DWORD dwNumPropIdsRequested,
  1057. [out] DWORD *pdwBeginningPropId);
  1058. HRESULT GetCCatConfigInfo(
  1059. [out] PCCATCONFIGINFO *ppCCatConfigInfo);
  1060. };
  1061. //+------------------------------------------------------------
  1062. //
  1063. // Interface: ICategorizerQueries
  1064. //
  1065. // Synopsis: Interface to an object that holds query strings
  1066. //
  1067. //
  1068. //-------------------------------------------------------------
  1069. [
  1070. object,
  1071. uuid(86F9DA7D-EB6E-11d1-9DF3-00C04FA322BA),
  1072. helpstring("ICategorizerQueries Interface"),
  1073. pointer_default(unique)
  1074. ]
  1075. interface ICategorizerQueries : IUnknown
  1076. {
  1077. HRESULT SetQueryString(
  1078. [in, unique] LPSTR pszQueryString);
  1079. HRESULT GetQueryString(
  1080. [out] LPSTR *ppszQueryString);
  1081. };
  1082. //+------------------------------------------------------------
  1083. //
  1084. // Interface: ICategorizerMailMsgs
  1085. //
  1086. // Synopsis: Interface to hold all MailMsgs associated with a message
  1087. // categorization
  1088. //
  1089. //-------------------------------------------------------------
  1090. //
  1091. // The structure used for mailmsg enumeration
  1092. //
  1093. typedef PVOID CATMAILMSG_ENUMERATOR, *PCATMAILMSG_ENUMERATOR;
  1094. [
  1095. object,
  1096. local,
  1097. uuid(86F9DA80-EB6E-11d1-9DF3-00C04FA322BA),
  1098. helpstring("ICategorizerMailMsgs Interface"),
  1099. pointer_default(unique)
  1100. ]
  1101. interface ICategorizerMailMsgs : IUnknown
  1102. {
  1103. HRESULT GetMailMsg(
  1104. [in] DWORD dwFlags,
  1105. [out] IMailMsgProperties **ppIMailMsgProperties,
  1106. [out] IMailMsgRecipientsAdd **ppIMailMsgRecipientsAdd,
  1107. [out] BOOL *pfCreated);
  1108. HRESULT ReBindMailMsg(
  1109. [in] DWORD dwFlags,
  1110. [in] IUnknown *pStoreDriver);
  1111. //
  1112. // Functions to enumerate all created mailmsg
  1113. //
  1114. HRESULT BeginMailMsgEnumeration(
  1115. [in] PCATMAILMSG_ENUMERATOR penumerator);
  1116. HRESULT GetNextMailMsg(
  1117. [in] PCATMAILMSG_ENUMERATOR penumerator,
  1118. [out] DWORD *pdwFlags,
  1119. [out] IMailMsgProperties **ppIMailMsgProperties,
  1120. [out] IMailMsgRecipientsAdd **ppIMailMsgRecipientsAdd);
  1121. HRESULT EndMailMsgEnumeration(
  1122. [in] PCATMAILMSG_ENUMERATOR penumerator);
  1123. }
  1124. //+------------------------------------------------------------
  1125. //
  1126. // Interface: ICategorizerItemAttributes
  1127. //
  1128. // Synopsis: Sink supplied interface with methods to get at object attributes
  1129. //
  1130. //
  1131. //-------------------------------------------------------------
  1132. //
  1133. // The structure used for attribute enumeration
  1134. //
  1135. typedef struct _tagAttributeEnumerator {
  1136. PVOID pvBase;
  1137. PVOID pvCurrent;
  1138. PVOID pvContext;
  1139. } ATTRIBUTE_ENUMERATOR, *PATTRIBUTE_ENUMERATOR;
  1140. [
  1141. object,
  1142. uuid(86F9DA7F-EB6E-11d1-9DF3-00C04FA322BA),
  1143. helpstring("ICategorizerItemAttributes Interface"),
  1144. pointer_default(unique)
  1145. ]
  1146. interface ICategorizerItemAttributes : IUnknown
  1147. {
  1148. //
  1149. // Functions to enumerate through a specified attribute value
  1150. //
  1151. [local] HRESULT BeginAttributeEnumeration(
  1152. [in, unique] LPCSTR pszAttributeName,
  1153. [in] PATTRIBUTE_ENUMERATOR penumerator);
  1154. [local] HRESULT GetNextAttributeValue(
  1155. [in] PATTRIBUTE_ENUMERATOR penumerator,
  1156. [out] LPSTR *ppszAttributeValue);
  1157. [local] HRESULT RewindAttributeEnumeration(
  1158. [in] PATTRIBUTE_ENUMERATOR penumerator);
  1159. [local] HRESULT EndAttributeEnumeration(
  1160. [in] PATTRIBUTE_ENUMERATOR penumerator);
  1161. //
  1162. // Functions to enumerate through the available attribute names
  1163. //
  1164. [local] HRESULT BeginAttributeNameEnumeration(
  1165. [in] PATTRIBUTE_ENUMERATOR penumerator);
  1166. [local] HRESULT GetNextAttributeName(
  1167. [in] PATTRIBUTE_ENUMERATOR penumerator,
  1168. [out] LPSTR *ppszAttributeName);
  1169. [local] HRESULT EndAttributeNameEnumeration(
  1170. [in] PATTRIBUTE_ENUMERATOR penumerator);
  1171. [local] GUID GetTransportSinkID();
  1172. [local] HRESULT AggregateAttributes(
  1173. [in] ICategorizerItemAttributes *pICatItemAttr);
  1174. //
  1175. // Support to retrieve all attributes at the same time.
  1176. //
  1177. [local] HRESULT GetAllAttributeValues(
  1178. [in, unique] LPCSTR pszAttributeName,
  1179. [in] PATTRIBUTE_ENUMERATOR penumerator,
  1180. [out] LPSTR **prgpszAttributeValues);
  1181. [local] HRESULT ReleaseAllAttributeValues(
  1182. [in] PATTRIBUTE_ENUMERATOR penumerator);
  1183. //
  1184. // Count the attribute values before enumeating
  1185. //
  1186. [local] HRESULT CountAttributeValues(
  1187. [in] PATTRIBUTE_ENUMERATOR penumerator,
  1188. [out] DWORD *pdwCount);
  1189. }
  1190. //+------------------------------------------------------------
  1191. //
  1192. // Interface: ICategorizerItemRawAttributes
  1193. //
  1194. // Synopsis: Sink supplied interface with methods to get at raw object attributes
  1195. //
  1196. //
  1197. //-------------------------------------------------------------
  1198. [
  1199. object,
  1200. uuid(34C3D389-8FA7-11d2-9E16-00C04FA322BA),
  1201. helpstring("ICategorizerItemRawAttributes Interface"),
  1202. pointer_default(unique)
  1203. ]
  1204. interface ICategorizerItemRawAttributes : IUnknown
  1205. {
  1206. //
  1207. // Functions to enumerate through a specified attribute value
  1208. //
  1209. [local] HRESULT BeginRawAttributeEnumeration(
  1210. [in, unique] LPCSTR pszAttributeName,
  1211. [in] PATTRIBUTE_ENUMERATOR penumerator);
  1212. [local] HRESULT GetNextRawAttributeValue(
  1213. [in] PATTRIBUTE_ENUMERATOR penumerator,
  1214. [out] DWORD *pdwcb,
  1215. [out] LPVOID *pvAttributeValue);
  1216. [local] HRESULT RewindRawAttributeEnumeration(
  1217. [in] PATTRIBUTE_ENUMERATOR penumerator);
  1218. [local] HRESULT EndRawAttributeEnumeration(
  1219. [in] PATTRIBUTE_ENUMERATOR penumerator);
  1220. //
  1221. // Count the attribute values before enumeating
  1222. //
  1223. [local] HRESULT CountRawAttributeValues(
  1224. [in] PATTRIBUTE_ENUMERATOR penumerator,
  1225. [out] DWORD *pdwCount);
  1226. }
  1227. //+------------------------------------------------------------
  1228. //
  1229. // Interface: ICategorizerItem
  1230. //
  1231. // Synopsis: A property interface with a number of well known propIDs
  1232. // (below)
  1233. //
  1234. //
  1235. //-------------------------------------------------------------
  1236. typedef [v1_enum] enum
  1237. {
  1238. ICATEGORIZERITEM_SOURCETYPE = 0,
  1239. ICATEGORIZERITEM_LDAPQUERYSTRING,
  1240. ICATEGORIZERITEM_DISTINGUISHINGATTRIBUTE,
  1241. ICATEGORIZERITEM_DISTINGUISHINGATTRIBUTEVALUE,
  1242. ICATEGORIZERITEM_IMAILMSGPROPERTIES,
  1243. ICATEGORIZERITEM_IMAILMSGRECIPIENTSADD,
  1244. ICATEGORIZERITEM_IMAILMSGRECIPIENTSADDINDEX,
  1245. ICATEGORIZERITEM_FPRIMARY,
  1246. ICATEGORIZERITEM_PARENT,
  1247. ICATEGORIZERITEM_ICATEGORIZERITEMATTRIBUTES,
  1248. ICATEGORIZERITEM_HRSTATUS,
  1249. ICATEGORIZERITEM_ICATEGORIZERLISTRESOLVE,
  1250. ICATEGORIZERITEM_ICATEGORIZERMAILMSGS,
  1251. ICATEGORIZERITEM_HRNDRREASON,
  1252. ICATEGORIZERITEM_DWLEVEL,
  1253. ICATEGORIZERITEM_ENDENUMMESS
  1254. } eICATEGORIZERITEMPROPID;
  1255. typedef [v1_enum] enum
  1256. {
  1257. SOURCE_SENDER,
  1258. SOURCE_RECIPIENT,
  1259. SOURCE_VERIFY
  1260. } eSourceType;
  1261. [
  1262. local,
  1263. object,
  1264. uuid(86F9DA7C-EB6E-11d1-9DF3-00C04FA322BA),
  1265. helpstring("ICategorizerItem Interface"),
  1266. pointer_default(unique)
  1267. ]
  1268. interface ICategorizerItem : ICategorizerProperties {};
  1269. //+------------------------------------------------------------
  1270. //
  1271. // Interface: ICategorizerAsyncContext
  1272. //
  1273. // Synopsis: Interface handed out to sinks containing async context methods
  1274. //
  1275. //
  1276. //-------------------------------------------------------------
  1277. [
  1278. object,
  1279. uuid(86F9DA7E-EB6E-11d1-9DF3-00C04FA322BA),
  1280. helpstring("ICategorizerAsyncCompletion Interface"),
  1281. pointer_default(unique)
  1282. ]
  1283. interface ICategorizerAsyncContext : IUnknown
  1284. {
  1285. [local] HRESULT CompleteQuery(
  1286. [in] PVOID pvQueryContext,
  1287. [in] HRESULT hrResolutionStatus,
  1288. [in] DWORD dwcResults,
  1289. [in, size_is(dwcResults)] ICategorizerItemAttributes **rgpItemAttributes,
  1290. [in] BOOL fFinalCompletion);
  1291. }
  1292. //+------------------------------------------------------------
  1293. //
  1294. // Interface: ICategorizerListResolve
  1295. //
  1296. // Synopsis: Interface handed out to sinks that can spin off further resolves
  1297. //
  1298. //
  1299. //-------------------------------------------------------------
  1300. [
  1301. object,
  1302. uuid(960252A4-0A3A-11d2-9E00-00C04FA322BA),
  1303. helpstring("ICategorizerListResolve Interface"),
  1304. pointer_default(unique)
  1305. ]
  1306. interface ICategorizerListResolve : IUnknown
  1307. {
  1308. [local] HRESULT AllocICategorizerItem(
  1309. [in] eSourceType SourceType,
  1310. [out] ICategorizerItem **ppICatItem);
  1311. [local] HRESULT ResolveICategorizerItem(
  1312. [in] ICategorizerItem *pICatItem);
  1313. [local] HRESULT SetListResolveStatus(
  1314. [in] HRESULT hrStatus);
  1315. [local] HRESULT GetListResolveStatus(
  1316. [out] HRESULT *phrStatus);
  1317. }
  1318. //+------------------------------------------------------------
  1319. //
  1320. // Interface: IMailTransportCategorize
  1321. //
  1322. // Synopsis: Interface a sink must implement in order to handle
  1323. // categorizer events
  1324. //
  1325. //
  1326. //-------------------------------------------------------------
  1327. [
  1328. object,
  1329. uuid(86F9DA7A-EB6E-11d1-9DF3-00C04FA322BA),
  1330. helpstring("IMailTransportCategorize Interface"),
  1331. pointer_default(unique)
  1332. ]
  1333. interface IMailTransportCategorize : IUnknown
  1334. {
  1335. HRESULT Register(
  1336. [in] ICategorizerParameters *);
  1337. [local] HRESULT BeginMessageCategorization(
  1338. [in] ICategorizerMailMsgs *);
  1339. [local] HRESULT EndMessageCategorization(
  1340. [in] ICategorizerMailMsgs *,
  1341. [in] HRESULT hrCatStatus);
  1342. [local] HRESULT BuildQuery(
  1343. [in] ICategorizerParameters *,
  1344. [in] ICategorizerItem *);
  1345. [local] HRESULT BuildQueries(
  1346. [in] ICategorizerParameters *,
  1347. [in] DWORD dwcAddresses,
  1348. [in, size_is(dwcAddresses)] ICategorizerItem **rgpICategorizerItems,
  1349. [in] ICategorizerQueries *);
  1350. [local] HRESULT SendQuery(
  1351. [in] ICategorizerParameters *,
  1352. [in] ICategorizerQueries *,
  1353. [in] ICategorizerAsyncContext *,
  1354. [in] PVOID pvQueryContext);
  1355. [local] HRESULT SortQueryResult(
  1356. [in] ICategorizerParameters *,
  1357. [in] HRESULT hrResolutionStatus,
  1358. [in] DWORD dwcAddresses,
  1359. [in, size_is(dwcAddresses)] ICategorizerItem **rgpICategorizerItems,
  1360. [in] DWORD dwcResults,
  1361. [in, size_is(dwcResults)] ICategorizerItemAttributes **rgpICategorizerItemAttributes);
  1362. [local] HRESULT ProcessItem(
  1363. [in] ICategorizerParameters *,
  1364. [in] ICategorizerItem *);
  1365. [local] HRESULT ExpandItem(
  1366. [in] ICategorizerParameters *,
  1367. [in] ICategorizerItem *,
  1368. [in] IMailTransportNotify *,
  1369. [in] PVOID);
  1370. [local] HRESULT CompleteItem(
  1371. [in] ICategorizerParameters *,
  1372. [in] ICategorizerItem *);
  1373. };
  1374. //
  1375. // See smtpguid.h for the CLSID and Program ID of the CoCreateable
  1376. // Categorizer
  1377. //
  1378. //+------------------------------------------------------------
  1379. //
  1380. // Interface: ISMTPCategorizer
  1381. //
  1382. // Synopsis: Interface to the SMTP categorizer
  1383. //
  1384. //
  1385. //-------------------------------------------------------------
  1386. [
  1387. object,
  1388. local,
  1389. uuid(B23C35B8-9219-11d2-9E17-00C04FA322BA),
  1390. helpstring("ISMTPCategorizer Interface"),
  1391. pointer_default(unique)
  1392. ]
  1393. interface ISMTPCategorizer : IUnknown
  1394. {
  1395. HRESULT ChangeConfig(
  1396. [in] PCCATCONFIGINFO pConfigInfo);
  1397. HRESULT CatMsg(
  1398. [in] IUnknown *pMsg,
  1399. [in] ISMTPCategorizerCompletion *pICompletion,
  1400. [in] LPVOID pContext);
  1401. HRESULT CatDLMsg(
  1402. [in] IUnknown *pMsg,
  1403. [in] ISMTPCategorizerDLCompletion *pICompletion,
  1404. [in] LPVOID pContext,
  1405. [in] BOOL fMatchOnly,
  1406. [in] CAT_ADDRESS_TYPE CAType,
  1407. [in] LPSTR pszAddress);
  1408. HRESULT CatCancel();
  1409. };
  1410. //+------------------------------------------------------------
  1411. //
  1412. // Interface: ISMTPCategorizerCompletion
  1413. //
  1414. // Synopsis: Async completion interface
  1415. //
  1416. //
  1417. //-------------------------------------------------------------
  1418. [
  1419. object,
  1420. local,
  1421. uuid(B23C35B9-9219-11d2-9E17-00C04FA322BA),
  1422. helpstring("ISMTPCategorizerCompletion Interface"),
  1423. pointer_default(unique)
  1424. ]
  1425. interface ISMTPCategorizerCompletion : IUnknown
  1426. {
  1427. HRESULT CatCompletion(
  1428. HRESULT hr,
  1429. PVOID pContext,
  1430. IUnknown *pImsg,
  1431. IUnknown **rgpImsg);
  1432. };
  1433. //+------------------------------------------------------------
  1434. //
  1435. // Interface: ISMTPCategorizerDLCompletion
  1436. //
  1437. // Synopsis: Async completion interface
  1438. //
  1439. //
  1440. //-------------------------------------------------------------
  1441. [
  1442. object,
  1443. local,
  1444. uuid(B23C35BA-9219-11d2-9E17-00C04FA322BA),
  1445. helpstring("ISMTPCategorizerDLCompletion Interface"),
  1446. pointer_default(unique)
  1447. ]
  1448. interface ISMTPCategorizerDLCompletion : IUnknown
  1449. {
  1450. HRESULT CatDLCompletion(
  1451. HRESULT hr,
  1452. PVOID pContext,
  1453. IUnknown *pImsg,
  1454. BOOL fMatch);
  1455. };
  1456. //---[ eDomainInfoFlags ]------------------------------------------------------
  1457. //
  1458. //
  1459. // Description: Flags used to describe boolean per domain properties
  1460. //
  1461. //-----------------------------------------------------------------------------
  1462. typedef [v1_enum] enum
  1463. {
  1464. //Outbound protocol property flags
  1465. DOMAIN_INFO_REMOTE = 0x00000000, //Default setting
  1466. DOMAIN_INFO_USE_SSL = 0x00000001, //Use SSL on outbound connections
  1467. DOMAIN_INFO_SEND_TURN = 0x00000002, //Send TURN on outbound connections
  1468. DOMAIN_INFO_SEND_ETRN = 0x00000004, //Send ETRN on outbound connections
  1469. DOMAIN_INFO_USE_NTLM = 0x00000008, //Use NTLM auth on outbound
  1470. DOMAIN_INFO_USE_PLAINTEXT = 0x00000010, //Use plaintext auth on outbound
  1471. DOMAIN_INFO_USE_DPA = 0x00000020, //Use DPA auth on outbound
  1472. DOMAIN_INFO_USE_KERBEROS = 0x00000040, //Use Kerberos auth on outbound
  1473. DOMAIN_INFO_USE_CHUNKING = 0x00000080, //Require binary chunking on outbound
  1474. DOMAIN_INFO_DISABLE_CHUNKING = 0x00000100, //For this specific domain disaalow CHUNKING
  1475. DOMAIN_INFO_DISABLE_BMIME = 0x00000200, //For this specific domain disallow BMIME
  1476. DOMAIN_INFO_DISABLE_DSN = 0x00000400, //For this specific domain disallow DSN
  1477. DOMAIN_INFO_DISABLE_PIPELINE = 0x00000800, //For this specific domain disallow PIPElineing
  1478. DOMAIN_INFO_USE_HELO = 0x00001000, //Send HELO instead of EHLO
  1479. //Queueing/Routing flags
  1480. DOMAIN_INFO_TURN_ONLY = 0x00010000, //Create connection only when asked (uses GetNamedConnection)
  1481. DOMAIN_INFO_ETRN_ONLY = 0x00020000, //Do no create connections until told to (uses GetNextConnection)
  1482. DOMAIN_INFO_LOCAL_DROP = 0x00040000, //Local drop domain
  1483. DOMAIN_INFO_LOCAL_MAILBOX = 0x00080000, //Local domain (no drop directory)
  1484. DOMAIN_INFO_REMOTE_SMARTHOST = 0x00100000, //Remote domain with smart host
  1485. DOMAIN_INFO_IP_RELAY = 0x00200000, //Allow Relay based on IP address
  1486. DOMAIN_INFO_AUTH_RELAY = 0x00400000, //Allow Relay based on authentication
  1487. DOMAIN_INFO_DOMAIN_RELAY = 0x00800000, //Allow Relay based on domain name
  1488. DOMAIN_INFO_ALIAS = 0x01000000, //Local alias domain
  1489. DOMAIN_INFO_TURN_ON_EMPTY = 0x02000000, //TURN works on empty conns
  1490. DOMAIN_INFO_INVALID = 0x80000000, //Used for returning "invalid" or "not found" info
  1491. } eDomainInfoFlags ;
  1492. //+------------------------------------------------------------
  1493. //
  1494. // Interface: ICategorizerDomainInfo
  1495. //
  1496. // Synopsis: An interface to retrieve above domain info flags
  1497. // describing a given SMTP domain
  1498. //
  1499. //-------------------------------------------------------------
  1500. [
  1501. object,
  1502. local,
  1503. uuid(E210EDC6-F27D-481f-9DFC-1CA840905FD9),
  1504. helpstring("ICategorizerDomainInfo Interface"),
  1505. pointer_default(unique)
  1506. ]
  1507. interface ICategorizerDomainInfo : IUnknown
  1508. {
  1509. HRESULT GetDomainInfoFlags(
  1510. [in, string] LPSTR szDomainName,
  1511. [out] DWORD *pdwDomainInfoFlags);
  1512. }
  1513. //+------------------------------------------------------------
  1514. //
  1515. // Interfaces pulled in from catintrnl.idl
  1516. //
  1517. interface ICategorizerRequestedAttributes;
  1518. interface ICategorizerLdapConfig;
  1519. interface IServersListInfo;
  1520. //+------------------------------------------------------------
  1521. //
  1522. // Interface: ICategorizerParametersEx
  1523. //
  1524. // Synopsis: ICategorizerParameters plus new methods to retrieve
  1525. // requested attributes, register an interface which may be called
  1526. // to get the list of GCs from dsaccess. Also a "Get" function for
  1527. // the aforementioned interface.
  1528. //
  1529. // History:
  1530. // jstamerj 1999/07/08 14:24:56: Created
  1531. //
  1532. //-------------------------------------------------------------
  1533. [
  1534. object,
  1535. local,
  1536. uuid(E962BA1F-3FB9-11d3-80D7-00C04FA322BA),
  1537. helpstring("ICategorizerParametersEx Interface"),
  1538. pointer_default(unique)
  1539. ]
  1540. interface ICategorizerParametersEx : ICategorizerParameters
  1541. {
  1542. HRESULT GetDSParameterW(
  1543. [in] DWORD dwDSParameter,
  1544. [out] LPWSTR *ppszValue);
  1545. HRESULT GetRequestedAttributes(
  1546. [out] ICategorizerRequestedAttributes **ppIRequestedAttributes);
  1547. HRESULT RegisterCatLdapConfigInterface(
  1548. [out] ICategorizerLdapConfig *pICategorizerLdapConfig);
  1549. HRESULT GetLdapConfigInterface(
  1550. [out] ICategorizerLdapConfig **ppICatLdapConfigInfo);
  1551. };
  1552. //+------------------------------------------------------------
  1553. //
  1554. // Interface: ICategorizerRequestedAttributes
  1555. //
  1556. // Synopsis: Contains a read-only method to retrieve all the requested
  1557. // attributes
  1558. //
  1559. // History:
  1560. // jstamerj 1999/07/08 14:24:56: Created
  1561. //
  1562. //-------------------------------------------------------------
  1563. [
  1564. object,
  1565. local,
  1566. uuid(CB0924E0-357B-11d3-8328-00C04FA322BA),
  1567. helpstring("ICategorizerRequestedAttributes Interface"),
  1568. pointer_default(unique)
  1569. ]
  1570. interface ICategorizerRequestedAttributes : IUnknown
  1571. {
  1572. HRESULT GetAllAttributes(
  1573. [out] LPSTR **prgszAllAttributes);
  1574. HRESULT GetAllAttributesW(
  1575. [out] LPWSTR **prgszAllAttributes);
  1576. };
  1577. //+------------------------------------------------------------
  1578. //
  1579. // Interface: ICategorizerUTF8Attributes
  1580. //
  1581. // Synopsis: Methods to retrieve attributes as UTF8 strings
  1582. //
  1583. // History:
  1584. // jstamerj 1999/07/08 14:24:56: Created
  1585. //
  1586. //-------------------------------------------------------------
  1587. [
  1588. object,
  1589. local,
  1590. uuid(BEBF931D-17E0-4ec8-BC1C-CC3286D72CB7),
  1591. helpstring("ICategorizerUTF8Attributes Interface"),
  1592. pointer_default(unique)
  1593. ]
  1594. interface ICategorizerUTF8Attributes : IUnknown
  1595. {
  1596. [local] HRESULT BeginUTF8AttributeEnumeration(
  1597. [in, unique] LPCSTR pszAttributeName,
  1598. [in] PATTRIBUTE_ENUMERATOR penumerator);
  1599. [local] HRESULT GetNextUTF8AttributeValue(
  1600. [in] PATTRIBUTE_ENUMERATOR penumerator,
  1601. [out] LPSTR *ppszAttributeValue);
  1602. [local] HRESULT RewindUTF8AttributeEnumeration(
  1603. [in] PATTRIBUTE_ENUMERATOR penumerator);
  1604. [local] HRESULT EndUTF8AttributeEnumeration(
  1605. [in] PATTRIBUTE_ENUMERATOR penumerator);
  1606. [local] HRESULT CountUTF8AttributeValues(
  1607. [in] PATTRIBUTE_ENUMERATOR penumerator,
  1608. [out] DWORD *pdwCount);
  1609. };
  1610. //+------------------------------------------------------------
  1611. //
  1612. // Interface: ICategorizerLdapConfig
  1613. //
  1614. // Synopsis: Contains a function that may be queried for the GCs
  1615. // on the machine as discovered by dsaccess (or as read from the
  1616. // registry by dsaccess).
  1617. //
  1618. // History:
  1619. // gpulla created
  1620. //
  1621. //-------------------------------------------------------------
  1622. [
  1623. object,
  1624. local,
  1625. uuid(27C1B2D3-1A28-4b90-BC0A-E52057D30712),
  1626. helpstring("ICategorizerLdapConfig Interface"),
  1627. pointer_default(unique)
  1628. ]
  1629. interface ICategorizerLdapConfig : IUnknown
  1630. {
  1631. HRESULT GetGCServers(
  1632. [out] IServersListInfo **pIServersListInfo);
  1633. };
  1634. //+------------------------------------------------------------
  1635. //
  1636. // Interface: IServersListInfo
  1637. //
  1638. // Synopsis: Interface to an object encapsulating the list of
  1639. // GCs described above. Functions allow querying the number of
  1640. // GCs and enumerating through the GCs.
  1641. //
  1642. // History:
  1643. // gpulla created
  1644. //
  1645. //-------------------------------------------------------------
  1646. [
  1647. object,
  1648. local,
  1649. uuid(C54CEA94-E501-4f34-8704-F5881EA5CBF4),
  1650. helpstring("IServersListInfo Interface"),
  1651. pointer_default(unique)
  1652. ]
  1653. interface IServersListInfo : IUnknown
  1654. {
  1655. HRESULT GetNumGC(
  1656. [out] DWORD *dwGC);
  1657. HRESULT GetItem(
  1658. [in] DWORD dwIdx,
  1659. [out] DWORD *dwPort,
  1660. [out] LPSTR *pszServerName);
  1661. };
  1662. cpp_quote("#endif //__SMTPEVENT_H__")