libwine: Added a wine_call_on_stack function.
[wine] / include / imnxport.idl
1 /*
2  * Copyright 2006 Robert Shearman for CodeWeavers
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17  */
18
19 import "imnact.idl";
20
21 interface IInternetTransport;
22 interface ISMTPTransport;
23 interface IPOP3Transport;
24
25 /* CLSIDs */
26
27 cpp_quote("DEFINE_GUID(CLSID_IInternetMessageUrl, 0xca30cc91, 0xb1b3, 0x11d0, 0x85, 0xd0, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
28 cpp_quote("DEFINE_GUID(CLSID_ISMTPTransport, 0xfd853ce6, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
29 cpp_quote("DEFINE_GUID(CLSID_IPOP3Transport, 0xfd853ce7, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
30 cpp_quote("DEFINE_GUID(CLSID_INNTPTransport, 0xfd853ce8, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
31 cpp_quote("DEFINE_GUID(CLSID_IRASTransport, 0xfd853ce9, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
32 cpp_quote("DEFINE_GUID(CLSID_IRangeList, 0xfd853cea, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
33 cpp_quote("DEFINE_GUID(CLSID_IIMAPTransport, 0xfd853ceb, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
34 cpp_quote("DEFINE_GUID(CLSID_IHTTPMailTransport, 0x5a580c11, 0xe5eb, 0x11d1, 0xa8, 0x6e, 0x00, 0x00, 0xf8, 0x08, 0x4f, 0x96);")
35 cpp_quote("DEFINE_GUID(CLSID_IPropFindRequest, 0xbb847b8a, 0x054a, 0x11d2, 0xa8, 0x94, 0x00, 0x00, 0xf8, 0x08, 0x4f, 0x96);")
36 cpp_quote("DEFINE_GUID(CLSID_IPropPatchRequest, 0xea678830, 0x235d, 0x11d2, 0xa8, 0xb6, 0x00, 0x00, 0xf8, 0x08, 0x4f, 0x96);")
37
38 /* Error Codes */
39
40 cpp_quote("#ifndef HR_E")
41 cpp_quote("#define HR_E(n) MAKE_SCODE(SEVERITY_ERROR, FACILITY_INTERNET, n)")
42 cpp_quote("#endif")
43 cpp_quote("#ifndef HR_S")
44 cpp_quote("#define HR_S(n) MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_INTERNET, n)")
45 cpp_quote("#endif")
46
47 /* General Error Codes */
48 cpp_quote("#define IXP_E_LOAD_SICILY_FAILED     HR_E(0xCC00)")
49 cpp_quote("#define IXP_E_INVALID_CERT_CN        HR_E(0xCC01)")
50 cpp_quote("#define IXP_E_INVALID_CERT_DATE      HR_E(0xCC02)")
51 cpp_quote("#define IXP_E_ALREADY_CONNECTED      HR_E(0xCC03)")
52 cpp_quote("#define IXP_E_CONN                   HR_E(0xCC04)")
53 cpp_quote("#define IXP_E_NOT_CONNECTED          HR_E(0xCC05)")
54 cpp_quote("#define IXP_E_CONN_SEND              HR_E(0xCC06)")
55 cpp_quote("#define IXP_E_WOULD_BLOCK            HR_E(0xCC07)")
56 cpp_quote("#define IXP_E_INVALID_STATE          HR_E(0xCC08)")
57 cpp_quote("#define IXP_E_CONN_RECV              HR_E(0xCC09)")
58 cpp_quote("#define IXP_E_INCOMPLETE             HR_E(0xCC0A)")
59 cpp_quote("#define IXP_E_BUSY                   HR_E(0xCC0B)")
60 cpp_quote("#define IXP_E_NOT_INIT               HR_E(0xCC0C)")
61 cpp_quote("#define IXP_E_CANT_FIND_HOST         HR_E(0xCC0D)")
62 cpp_quote("#define IXP_E_FAILED_TO_CONNECT      HR_E(0xCC0E)")
63 cpp_quote("#define IXP_E_CONNECTION_DROPPED     HR_E(0xCC0F)")
64 cpp_quote("#define IXP_E_INVALID_ADDRESS        HR_E(0xCC10)")
65 cpp_quote("#define IXP_E_INVALID_ADDRESS_LIST   HR_E(0xCC11)")
66 cpp_quote("#define IXP_E_SOCKET_READ_ERROR      HR_E(0xCC12)")
67 cpp_quote("#define IXP_E_SOCKET_WRITE_ERROR     HR_E(0xCC13)")
68 cpp_quote("#define IXP_E_SCOKET_INIT_ERROR      HR_E(0xCC14)")
69 cpp_quote("#define IXP_E_SOCKET_CONNECT_ERROR   HR_E(0xCC15)")
70 cpp_quote("#define IXP_E_INVALID_ACCOUNT        HR_E(0xCC16)")
71 cpp_quote("#define IXP_E_USER_CANCEL            HR_E(0xCC17)")
72 cpp_quote("#define IXP_E_SICILY_LOGON_FAILED    HR_E(0xCC18)")
73 cpp_quote("#define IXP_E_TIMEOUT                HR_E(0xCC19)")
74 cpp_quote("#define IXP_E_SECURE_CONNECT_FAILED  HR_E(0xCC1A)")
75
76 /* SMTP Failure Statuses */
77 cpp_quote("#define IXP_E_SMTP_RESPONSE_ERROR            HR_E(0xCC60)")
78 cpp_quote("#define IXP_E_SMTP_UNKNOWN_RESPONSE_CODE     HR_E(0xCC61)")
79 cpp_quote("#define IXP_E_SMTP_500_SYNTAX_ERROR          HR_E(0xCC62)")
80 cpp_quote("#define IXP_E_SMTP_501_PARAM_SYNTAX          HR_E(0xCC63)")
81 cpp_quote("#define IXP_E_SMTP_502_COMMAND_NOTIMPL       HR_E(0xCC64)")
82 cpp_quote("#define IXP_E_SMTP_503_COMMAND_SEQ           HR_E(0xCC65)")
83 cpp_quote("#define IXP_E_SMTP_504_COMMAND_PARAM_NOTIMPL HR_E(0xCC66)")
84 cpp_quote("#define IXP_E_SMTP_421_NOT_AVAILABLE         HR_E(0xCC67)")
85 cpp_quote("#define IXP_E_SMTP_450_MAILBOX_BUSY          HR_E(0xCC68)")
86 cpp_quote("#define IXP_E_SMTP_550_MAILBOX_NOT_FOUND     HR_E(0xCC69)")
87 cpp_quote("#define IXP_E_SMTP_451_ERROR_PROCESSING      HR_E(0xCC6A)")
88 cpp_quote("#define IXP_E_SMTP_551_USER_NOT_LOCAL        HR_E(0xCC6B)")
89 cpp_quote("#define IXP_E_SMTP_452_NO_SYSTEM_STORAGE     HR_E(0xCC6C)")
90 cpp_quote("#define IXP_E_SMTP_552_STORAGE_OVERFLOW      HR_E(0xCC6D)")
91 cpp_quote("#define IXP_E_SMTP_553_MAILBOX_NAME_SYNTAX   HR_E(0xCC6E)")
92 cpp_quote("#define IXP_E_SMTP_554_TRANSACT_FAILED       HR_E(0xCC6F)")
93
94 /* SMTP Success Statuses */
95 cpp_quote("#define IXP_E_SMTP_211_SYSTEM_STATUS         HR_S(0xCC70)")
96 cpp_quote("#define IXP_E_SMTP_214_HELP_MESSAGE          HR_S(0xCC71)")
97 cpp_quote("#define IXP_E_SMTP_220_READY                 HR_S(0xCC72)")
98 cpp_quote("#define IXP_E_SMTP_221_CLOSING               HR_S(0xCC73)")
99 cpp_quote("#define IXP_E_SMTP_250_MAIL_ACTION_OKAY      HR_S(0xCC74)")
100 cpp_quote("#define IXP_E_SMTP_251_FORWARDING_MAIL       HR_S(0xCC75)")
101 cpp_quote("#define IXP_E_SMTP_354_START_MAIL_INPUT      HR_S(0xCC76)")
102 cpp_quote("#define IXP_E_SMTP_CONTINUE                  HR_S(0xCC77)")
103 cpp_quote("#define IXP_E_SMTP_334_AUTH_READY_RESPONSE   HR_S(0xCC78)")
104 cpp_quote("#define IXP_E_SMTP_245_AUTH_SUCCESS          HR_S(0xCC79)")
105
106 /* More SMTP Failure Statuses */
107 cpp_quote("#define IXP_E_SMTP_REJECTED_SENDER           HR_E(0xCC78)")
108 cpp_quote("#define IXP_E_SMTP_REJECTED_RECIPIENTS       HR_E(0xCC79)")
109 cpp_quote("#define IXP_E_SMTP_NO_SENDER                 HR_E(0xCC7A)")
110 cpp_quote("#define IXP_E_SMTP_NO_RECIPIENTS             HR_E(0xCC7B)")
111 cpp_quote("#define IXP_E_SMTP_530_STARTTLS_REQUIRED     HR_E(0xCC7C)")
112 cpp_quote("#define IXP_E_SMTP_NO_STARTTLS_SUPPORT       HR_E(0xCC7D)")
113 cpp_quote("#define IXP_E_SMTP_NO_DSN_SUPPORT            HR_E(0xCC7E)")
114 cpp_quote("#define IXP_E_SMTP_454_STARTTLS_FAILED       HR_E(0xCC7F)")
115
116 const SHORT CCHMAX_DOMAIN = 256;
117 const SHORT CCHMAX_PHONE_NUMBER = 128;
118
119 const DWORD DEFAULT_IMAP_PORT = 143;
120 const DWORD DEFAULT_POP3_PORT = 110;
121 const DWORD DEFAULT_SMTP_PORT = 25;
122 const DWORD DEFAULT_NNTP_PORT = 119;
123
124 typedef enum tagINETADDRTYPE
125 {
126     ADDR_TO,
127     ADDR_FROM,
128     ADDR_DSN_NEVER = 16,
129     ADDR_DSN_SUCCESS = 32,
130     ADDR_DSN_FAILURE = 64,
131     ADDR_DSN_DELAY = 128
132 } INETADDRTYPE;
133
134 const DWORD ADDR_TOFROM_MASK = 0x1;
135 const DWORD ADDR_DSN_MASK = 0xf0;
136
137 typedef enum tagDSNRET
138 {
139     DSNRET_DEFAULT,
140     DSNRET_HDRS,
141     DSNRET_FULL,
142 } DSNRET;
143
144 typedef struct tagINETADDR
145 {
146     INETADDRTYPE addrtype;
147     CHAR szEmail[CCHMAX_EMAIL_ADDRESS];
148 } INETADDR, *LPINETADDR;
149
150 typedef struct tagINETADDRLIST
151 {
152     ULONG cAddress;
153     LPINETADDR prgAddress;
154 } INETADDRLIST, *LPINETADDRLIST;
155
156 typedef enum tagRASCONNTYPE
157 {
158     RAS_CONNECT_LAN,
159     RAS_CONNECT_MANUAL,
160     RAS_CONNECT_RAS
161 } RASCONNTYPE;
162
163 typedef enum tagHTTPMAILPROPTYPE
164 {
165     HTTPMAIL_PROP_INVALID,
166     HTTPMAIL_PROP_ADBAR,
167     HTTPMAIL_PROP_CONTACTS,
168     HTTPMAIL_PROP_INBOX,
169     HTTPMAIL_PROP_OUTBOX,
170     HTTPMAIL_PROP_SENDMSG,
171     HTTPMAIL_PROP_SENTITEMS,
172     HTTPMAIL_PROP_DELETEDITEMS,
173     HTTPMAIL_PROP_DRAFTS,
174     HTTPMAIL_PROP_MSGFOLDERROOT,
175     HTTPMAIL_PROP_SIG,
176     HTTPMAIL_PROP_LAST
177 } HTTPMAILPROPTYPE;
178
179 typedef enum tagHTTPMAILSPECIALFOLDER
180 {
181     HTTPMAIL_SF_NONE,
182     HTTPMAIL_SF_UNRECOGNIZED,
183     HTTPMAIL_SF_INBOX,
184     HTTPMAIL_SF_DELETEDITEMS,
185     HTTPMAIL_SF_DRAFTS,
186     HTTPMAIL_SF_OUTBOX,
187     HTTPMAIL_SF_SENTITEMS,
188     HTTPMAIL_SF_CONTACTS,
189     HTTPMAIL_SF_CALENDAR,
190     HTTPMAIL_SF_MSNPROMO,
191     HTTPMAIL_SF_LAST
192 } HTTPMAILSPECIALFOLDER;
193
194 typedef enum tagHTTPMAILCONTACTTYPE
195 {
196     HTTPMAIL_CT_CONTACT,
197     HTTPMAIL_CT_GROUP,
198     HTTPMAIL_CT_LAST
199 } HTTPMAILCONTACTTYPE;
200
201 const DWORD DAVNAMESPACE_UNKNOWN = 0xFFFFFFFF;
202 const DWORD DAVNAMESPACE_DAV = 0;
203 const DWORD DAVNAMESPACE_HOTMAIL = 1;
204 const DWORD DAVNAMESPACE_HTTPMAIL = 2;
205 const DWORD DAVNAMESPACE_MAIL = 3;
206 const DWORD DAVNAMESPACE_CONTACTS = 4;
207
208 cpp_quote("#define ISF_SMTP_USEIPFORHELO        0x01")
209 cpp_quote("#define ISF_ALWAYSPROMPTFORPASSWORD  0x02")
210 /* for SMTP - send EHLO and use STARTTLS if available: */
211 cpp_quote("#define ISF_SSLONSAMEPORT            0x04")
212 cpp_quote("#define ISF_QUERYDSNSUPPORT          0x08")
213 /* for SMTP - send EHLO and use AUTH if available: */
214 cpp_quote("#define ISF_QUERYAUTHSUPPORT         0x10")
215
216 typedef struct INETSERVER
217 {
218     CHAR szAccount[CCHMAX_ACCOUNT_NAME];
219     CHAR szUserName[CCHMAX_USERNAME];
220     CHAR szPassword[CCHMAX_PASSWORD];
221     CHAR szServerName[CCHMAX_SERVER_NAME];
222     CHAR szConnectoid[CCHMAX_CONNECTOID];
223     RASCONNTYPE rasconntype;
224     DWORD dwPort;
225     BOOL fSSL;
226     BOOL fTrySicily;
227     DWORD dwTimeout;
228     DWORD dwFlags;
229 } INETSERVER, *LPINETSERVER;
230
231 typedef enum tagIXPTYPE
232 {
233     IXP_NNTP,
234     IXP_SMTP,
235     IXP_POP3,
236     IXP_IMAP,
237     IXP_RAS,
238     IXP_HTTPMail
239 } IXPTYPE;
240
241 typedef enum tagIXPSTATUS
242 {
243     IXP_FINDINGHOST,
244     IXP_CONNECTING,
245     IXP_SECURING,
246     IXP_CONNECTED,
247     IXP_AUTHORIZING,
248     IXP_AUTHRETRY,
249     IXP_AUTHORIZED,
250     IXP_DISCONNECTING,
251     IXP_DISCONNECTED,
252     IXP_LAST
253 } IXPSTATUS;
254
255 const DWORD DEPTH_INFINITY = 0xFFFFFFFE;
256
257 typedef DWORD MEMBERINFOFLAGS;
258
259 const MEMBERINFOFLAGS HTTP_MEMBERINFO_COMMONPROPS = 0x0;
260 const MEMBERINFOFLAGS HTTP_MEMBERINFO_FOLDERPROPS = 0x1;
261 const MEMBERINFOFLAGS HTTP_MEMBERINFO_MESSAGEPROPS = 0x2;
262 const MEMBERINFOFLAGS HTTP_MEMBERINFO_ALLPROPS = HTTP_MEMBERINFO_FOLDERPROPS | HTTP_MEMBERINFO_MESSAGEPROPS;
263
264 typedef DWORD IMAP_MSGFLAGS;
265
266 const IMAP_MSGFLAGS IMAP_MSG_NOFLAGS = 0x00;
267 const IMAP_MSGFLAGS IMAP_MSG_ANSWERED = 0x01;
268 const IMAP_MSGFLAGS IMAP_MSG_FLAGGED = 0x02;
269 const IMAP_MSGFLAGS IMAP_MSG_DELETED = 0x04;
270 const IMAP_MSGFLAGS IMAP_MSG_SEEN = 0x08;
271 const IMAP_MSGFLAGS IMAP_MSG_DRAFT = 0x10;
272 const IMAP_MSGFLAGS IMAP_MSG_ALLFLAGS = 0x1f;
273
274 [
275     object,
276     uuid(CA30F3FF-C9AC-11D1-9A3A-00C04FA309D4),
277     local
278 ]
279 interface ITransportCallbackService : IUnknown
280 {
281     HRESULT GetParentWindow(
282         [in]    DWORD dwReserved,
283         [out]   HWND *phwndParent);
284
285     HRESULT GetAccount(
286         [out]   LPDWORD pdwServerType,
287         [out]   IImnAccount **ppAccount);
288 }
289
290 [
291     object,
292     uuid(0DF2C7E1-3435-11D0-81D0-00C04FD85AB4),
293     local
294 ]
295 interface ITransportCallback : IUnknown
296 {
297     typedef struct tagIXPRESULT
298     {
299         HRESULT hrResult;
300         LPSTR pszResponse;
301         UINT uiServerError;
302         HRESULT hrServerError;
303         DWORD dwSocketError;
304         LPSTR pszProblem;
305     } IXPRESULT, *LPIXPRESULT;
306
307     typedef enum tagCMDTYPE
308     {
309         CMD_SEND,
310         CMD_RESP
311     } CMDTYPE;
312
313     HRESULT OnTimeout(
314         [in,out]    DWORD *pdwTimeout,
315         [in]        IInternetTransport *pTransport);
316
317     HRESULT OnLogonPrompt(
318         [in,out]    LPINETSERVER pInetServer,
319         [in]        IInternetTransport *pTransport);
320
321     INT OnPrompt(
322         [in]    HRESULT hrError,
323         [in]    LPCSTR pszText,
324         [in]    LPCSTR pszCaption,
325         [in]    UINT uType,
326         [in]    IInternetTransport *pTransport);
327
328     HRESULT OnStatus(
329         [in]    IXPSTATUS ixpstatus,
330         [in]    IInternetTransport *pTransport);
331
332     HRESULT OnError(
333         [in]    IXPSTATUS ixpstatus,
334         [in]    LPIXPRESULT pResult,
335         [in]    IInternetTransport *pTransport);
336
337     HRESULT OnCommand(
338         [in]    CMDTYPE cmdtype,
339         [in]    LPSTR pszLine,
340         [in]    HRESULT hrResponse,
341         [in]    IInternetTransport *pTransport);
342 }
343
344 [
345     object,
346     uuid(1F636C01-364E-11D0-81D3-00C04FD85AB4),
347     local
348 ]
349 interface IInternetTransport : IUnknown
350 {
351     const boolean iitAUTHENTICATE = TRUE;
352     const boolean iitDONT_AUTHENTICATe = FALSE;
353     const boolean iitENABLE_ONCOMMAND = TRUE;
354     const boolean iitDISABLE_ONCOMMAND = FALSE;
355
356     typedef enum tagIXPISSTATE
357     {
358         IXP_IS_CONNECTED,
359         IXP_IS_BUSY,
360         IXP_IS_READY,
361         IXP_IS_AUTHENTICATED
362     } IXPISSTATE;
363
364     HRESULT GetServerInfo(
365         [in,out]    LPINETSERVER pInetServer);
366
367     IXPTYPE GetIXPType();
368
369     HRESULT IsState(
370         [in]    IXPISSTATE isstate);
371
372     HRESULT InetServerFromAccount(
373         [in]        IImnAccount *pAccount,
374         [in,out]    LPINETSERVER pInetServer);
375
376     HRESULT Connect(
377         [in]    LPINETSERVER pInetServer,
378         [in]    boolean fAuthenticate,
379         [in]    boolean fCommandLogging);
380
381     HRESULT HandsOffCallback();
382
383     HRESULT Disconnect();
384
385     HRESULT DropConnection();
386
387     HRESULT GetStatus(
388         [out]   IXPSTATUS *pCurrentStatus);
389 }
390
391 [
392     object,
393     uuid(1F636C02-364E-11D0-81D3-00C04FD85AB4),
394     local
395 ]
396 interface ISMTPCallback : ITransportCallback
397 {
398     typedef enum tagSMTPCOMMAND
399     {
400         SMTP_NONE,
401         SMTP_BANNER,
402         SMTP_CONNECTED,
403         SMTP_SEND_MESSAGE,
404         SMTP_AUTH,
405         SMTP_EHLO,
406         SMTP_HELO,
407         SMTP_MAIL,
408         SMTP_RCPT,
409         SMTP_RSET,
410         SMTP_QUIT,
411         SMTP_DATA,
412         SMTP_DOT,
413         SMTP_SEND_STREAM,
414         SMTP_CUSTOM
415     } SMTPCOMMAND;
416
417     typedef struct tagSMTPSTREAM
418     {
419         DWORD cbIncrement;
420         DWORD cbCurrent;
421         DWORD cbTotal;
422     } SMTPSTREAM, *LPSMTPSTREAM;
423
424     typedef struct tagSMTPRESPONSE
425     {
426         SMTPCOMMAND command;
427         BOOL fDone;
428         IXPRESULT rIxpResult;
429         ISMTPTransport *pTransport;
430
431         [switch_type(SMTPCOMMAND), switch_is(command)]
432         union
433         {
434         [case(SMTP_SEND_STREAM)]    SMTPSTREAM rStreamInfo;
435         [default];
436         };
437     } SMTPRESPONSE, *LPSMTPRESPONSE;
438
439     HRESULT OnResponse(
440         [in] LPSMTPRESPONSE pResponse);
441 }
442
443 [
444     object,
445     uuid(0DF2C7E2-3435-11D0-81D0-00C04FD85AB4),
446     local
447 ]
448 interface ISMTPTransport : IInternetTransport
449 {
450     typedef struct tagSMTPMESSAGE
451     {
452         ULONG cbSize;
453         LPSTREAM pstmMsg;
454         INETADDRLIST rAddressList;
455     } SMTPMESSAGE, *LPSMTPMESSAGE;
456
457     HRESULT InitNew(
458         [in]    LPSTR pszLogFilePath,
459         [in]    ISMTPCallback *pCallback);
460
461 cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
462 cpp_quote("#undef SendMessage")
463 cpp_quote("#endif")
464
465     HRESULT SendMessage(
466         [in]    LPSMTPMESSAGE pMessage);
467
468     HRESULT CommandMAIL(
469         [in]    LPSTR pszEmailFrom);
470
471     HRESULT CommandRCPT(
472         [in]    LPSTR pszEmailTo);
473
474     HRESULT CommandEHLO();
475
476     HRESULT CommandHELO();
477
478     HRESULT CommandAUTH(
479         [in]    LPSTR pszAuthType);
480
481     HRESULT CommandQUIT();
482
483     HRESULT CommandRSET();
484
485     HRESULT CommandDATA();
486
487     HRESULT CommandDOT();
488
489     HRESULT SendDataStream(
490         [in]    IStream *pStream,
491         [in]    ULONG cbSize);
492 }
493
494 [
495     object,
496     uuid(0DF2C7EC-3435-11D0-81D0-00C04FD85AB4),
497     local
498 ]
499 interface ISMTPTransport2 : ISMTPTransport
500 {
501     typedef struct tagSMTPMESSAGE2
502     {
503         SMTPMESSAGE smtpMsg;
504         LPSTR pszDSNENVID;
505         DSNRET dsnRet;
506         DWORD dwReserved;
507         DWORD dwReserved2;
508     } SMTPMESSAGE2, *LPSMTPMESSAGE2;
509
510     HRESULT SetWindow();
511
512     HRESULT ResetWindow();
513
514     HRESULT SendMessage2(
515         [in]    LPSMTPMESSAGE2 pMessage);
516
517     HRESULT CommandRCPT2(
518         [in]    LPSTR pszEmailTo,
519         [in]    INETADDRTYPE atDSN);
520 }
521
522 /* FIXME: IDAVNamespaceArbiter, IPropPatchRequest, IPropFindRequest, IPropFindMultiResponse, IPropFindResponse, IHTTPMailCallback, IHTTPMailTransport */
523
524 [
525     object,
526     uuid(0DF2C7E3-3435-11D0-81D0-00C04FD85AB4),
527     local
528 ]
529 interface IPOP3Callback : ITransportCallback
530 {
531     typedef enum tagPOP3COMMAND
532     {
533         POP3_NONE,
534         POP3_BANNER,
535         POP3_CONNECTED,
536         POP3_USER,
537         POP3_PASS,
538         POP3_AUTH,
539         POP3_UIDL,
540         POP3_STAT,
541         POP3_LIST,
542         POP3_DELE,
543         POP3_RETR,
544         POP3_TOP,
545         POP3_NOOP,
546         POP3_QUIT,
547         POP3_RSET,
548         POP3_CUSTOM
549     } POP3COMMAND;
550
551     typedef struct tagPOP3RETR
552     {
553         BOOL fHeader;
554         BOOL fBody;
555         DWORD dwPopId;
556         DWORD cbSoFar;
557         LPSTR pszLines;
558         ULONG cbLines;
559     } POP3RETR, *LPPOP3RETR;
560
561     typedef struct tagPOP3TOP
562     {
563         BOOL fHeader;
564         BOOL fBody;
565         DWORD dwPopId;
566         DWORD cPreviewLines;
567         DWORD cbSoFar;
568         LPSTR pszLines;
569         ULONG cbLines;
570     } POP3TOP, *LPPOP3TOP;
571
572     typedef struct tagPOP3LIST
573     {
574         DWORD dwPopId;
575         DWORD cbSize;
576     } POP3LIST, *LPPOP3LIST;
577
578     typedef struct tagPOP3UIDL
579     {
580         DWORD dwPopId;
581         LPSTR pszUidl;
582     } POP3UIDL, *LPPOP3UIDL;
583
584     typedef struct tagPOP3STAT
585     {
586         DWORD cMessages;
587         DWORD cbMessages;
588     } POP3STAT, *LPPOP3STAT;
589
590     typedef struct tagPOP3RESPONSE
591     {
592         POP3COMMAND command;
593         BOOL fDone;
594         IXPRESULT rIxpResult;
595         IPOP3Transport *pTransport;
596         BOOL fValidInfo;
597         [switch_type(POP3COMMAND), switch_is(command)]
598         union
599         {
600         [case(POP3_UIDL)] POP3UIDL rUidlInfo;
601         [case(POP3_STAT)] POP3STAT rStatInfo;
602         [case(POP3_LIST)] POP3LIST rListInfo;
603         [case(POP3_DELE)] DWORD dwPopId;
604         [case(POP3_RETR)] POP3RETR rRetrInfo;
605         [case(POP3_TOP)]  POP3TOP rTopInfo;
606         [default];
607         };
608     } POP3RESPONSE, *LPPOP3RESPONSE;
609
610     HRESULT OnResponse(
611         [in]    LPPOP3RESPONSE pResponse);
612 }
613
614 [
615     object,
616     uuid(0DF2C7E4-3435-11D0-81D0-00C04FD85AB4),
617     local
618 ]
619 interface IPOP3Transport : IInternetTransport
620 {
621     typedef enum tagPOP3CMDTYPE
622     {
623         POP3CMD_GET_POPID,
624         POP3CMD_GET_MARKED,
625         POP3CMD_GET_ALL
626     } POP3CMDTYPE;
627
628     typedef enum tagPOP3MARKTYPE
629     {
630         POP3_MARK_FOR_TOP = 0x01,
631         POP3_MARK_FOR_RETR = 0x02,
632         POP3_MARK_FOR_DELE = 0x04,
633         POP3_MARK_FOR_UIDL = 0x08,
634         POP3_MARK_FOR_LIST = 0x10
635     } POP3MARKTYPE;
636
637     HRESULT InitNew(
638         [in]    LPSTR pszLogFilePath,
639         [in]    IPOP3Callback *pCallback);
640
641     HRESULT MarkItem(
642         [in]    POP3MARKTYPE marktype,
643         [in]    DWORD dwPopId,
644         [in]    boolean fMarked);
645
646     HRESULT CommandAUTH(
647         [in]    LPSTR pszAuthType);
648
649     HRESULT CommandUSER(
650         [in]    LPSTR pszUserName);
651
652     HRESULT CommandPASS(
653         [in]    LPSTR pszPassword);
654
655     HRESULT CommandLIST(
656         [in]    POP3CMDTYPE cmdtype,
657         [in]    DWORD dwPopId);
658
659     HRESULT CommandTOP(
660         [in]    POP3CMDTYPE cmdtype,
661         [in]    DWORD dwPopId,
662         [in]    DWORD cPreviewLines);
663
664     HRESULT CommandQUIT();
665
666     HRESULT CommandSTAT();
667
668     HRESULT CommandNOOP();
669
670     HRESULT CommandRSET();
671
672     HRESULT CommandUIDL(
673         [in]    POP3CMDTYPE cmdtype,
674         [in]    DWORD dwPopId);
675
676     HRESULT CommandDELE(
677         [in]    POP3CMDTYPE cmdtype,
678         [in]    DWORD dwPopId);
679
680     HRESULT CommandRETR(
681         [in]    POP3CMDTYPE cmdtype,
682         [in]    DWORD dwPopId);
683 }
684
685 /* FIXME: INNTPCallback, INNTPTransport */
686
687 /* FIXME: IRangeList */
688
689 /* FIXME: IIMAPCallback, IIMAPTransport */
690
691 #if 0
692 cpp_quote("HRESULT WINAPI CreateRASTransport(IRASTransport **ppTransport);")
693 cpp_quote("HRESULT WINAPI CreateNNTPTransport(INNTPTransport **ppTransport);")
694 cpp_quote("HRESULT WINAPI CreateIMAPTransport(IIMAPTransport **ppTransport);")
695 cpp_quote("HRESULT WINAPI CreateIMAPTransport2(IIMAPTransport2 **ppTransport);")
696 cpp_quote("HRESULT WINAPI CreateRangeList(IRangeList **ppRangeList);")
697 #endif
698 cpp_quote("HRESULT WINAPI CreateSMTPTransport(ISMTPTransport **ppTransport);")
699 cpp_quote("HRESULT WINAPI CreatePOP3Transport(IPOP3Transport **ppTransport);")