xref: /reactos/sdk/include/psdk/imnxport.idl (revision 845faec4)
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
19import "imnact.idl";
20
21interface IInternetTransport;
22interface ISMTPTransport;
23interface IPOP3Transport;
24interface IIMAPTransport;
25
26/* CLSIDs */
27
28cpp_quote("DEFINE_GUID(CLSID_IInternetMessageUrl, 0xca30cc91, 0xb1b3, 0x11d0, 0x85, 0xd0, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
29cpp_quote("DEFINE_GUID(CLSID_ISMTPTransport, 0xfd853ce6, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
30cpp_quote("DEFINE_GUID(CLSID_ISMTPTransport2, 0xdf2c7eC, 0x3435, 0x11d0, 0x81, 0xd0, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
31cpp_quote("DEFINE_GUID(CLSID_IPOP3Transport, 0xfd853ce7, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
32cpp_quote("DEFINE_GUID(CLSID_INNTPTransport, 0xfd853ce8, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
33cpp_quote("DEFINE_GUID(CLSID_IRASTransport, 0xfd853ce9, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
34cpp_quote("DEFINE_GUID(CLSID_IRangeList, 0xfd853cea, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
35cpp_quote("DEFINE_GUID(CLSID_IIMAPTransport, 0xfd853ceb, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
36cpp_quote("DEFINE_GUID(CLSID_IHTTPMailTransport, 0x5a580c11, 0xe5eb, 0x11d1, 0xa8, 0x6e, 0x00, 0x00, 0xf8, 0x08, 0x4f, 0x96);")
37cpp_quote("DEFINE_GUID(CLSID_IPropFindRequest, 0xbb847b8a, 0x054a, 0x11d2, 0xa8, 0x94, 0x00, 0x00, 0xf8, 0x08, 0x4f, 0x96);")
38cpp_quote("DEFINE_GUID(CLSID_IPropPatchRequest, 0xea678830, 0x235d, 0x11d2, 0xa8, 0xb6, 0x00, 0x00, 0xf8, 0x08, 0x4f, 0x96);")
39
40/* Error Codes */
41
42cpp_quote("#ifndef HR_E")
43cpp_quote("#define HR_E(n) MAKE_SCODE(SEVERITY_ERROR, FACILITY_INTERNET, n)")
44cpp_quote("#endif")
45cpp_quote("#ifndef HR_S")
46cpp_quote("#define HR_S(n) MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_INTERNET, n)")
47cpp_quote("#endif")
48
49/* General Error Codes */
50cpp_quote("#define IXP_E_LOAD_SICILY_FAILED     HR_E(0xCC00)")
51cpp_quote("#define IXP_E_INVALID_CERT_CN        HR_E(0xCC01)")
52cpp_quote("#define IXP_E_INVALID_CERT_DATE      HR_E(0xCC02)")
53cpp_quote("#define IXP_E_ALREADY_CONNECTED      HR_E(0xCC03)")
54cpp_quote("#define IXP_E_CONN                   HR_E(0xCC04)")
55cpp_quote("#define IXP_E_NOT_CONNECTED          HR_E(0xCC05)")
56cpp_quote("#define IXP_E_CONN_SEND              HR_E(0xCC06)")
57cpp_quote("#define IXP_E_WOULD_BLOCK            HR_E(0xCC07)")
58cpp_quote("#define IXP_E_INVALID_STATE          HR_E(0xCC08)")
59cpp_quote("#define IXP_E_CONN_RECV              HR_E(0xCC09)")
60cpp_quote("#define IXP_E_INCOMPLETE             HR_E(0xCC0A)")
61cpp_quote("#define IXP_E_BUSY                   HR_E(0xCC0B)")
62cpp_quote("#define IXP_E_NOT_INIT               HR_E(0xCC0C)")
63cpp_quote("#define IXP_E_CANT_FIND_HOST         HR_E(0xCC0D)")
64cpp_quote("#define IXP_E_FAILED_TO_CONNECT      HR_E(0xCC0E)")
65cpp_quote("#define IXP_E_CONNECTION_DROPPED     HR_E(0xCC0F)")
66cpp_quote("#define IXP_E_INVALID_ADDRESS        HR_E(0xCC10)")
67cpp_quote("#define IXP_E_INVALID_ADDRESS_LIST   HR_E(0xCC11)")
68cpp_quote("#define IXP_E_SOCKET_READ_ERROR      HR_E(0xCC12)")
69cpp_quote("#define IXP_E_SOCKET_WRITE_ERROR     HR_E(0xCC13)")
70cpp_quote("#define IXP_E_SCOKET_INIT_ERROR      HR_E(0xCC14)")
71cpp_quote("#define IXP_E_SOCKET_CONNECT_ERROR   HR_E(0xCC15)")
72cpp_quote("#define IXP_E_INVALID_ACCOUNT        HR_E(0xCC16)")
73cpp_quote("#define IXP_E_USER_CANCEL            HR_E(0xCC17)")
74cpp_quote("#define IXP_E_SICILY_LOGON_FAILED    HR_E(0xCC18)")
75cpp_quote("#define IXP_E_TIMEOUT                HR_E(0xCC19)")
76cpp_quote("#define IXP_E_SECURE_CONNECT_FAILED  HR_E(0xCC1A)")
77
78/* SMTP Failure Statuses */
79cpp_quote("#define IXP_E_SMTP_RESPONSE_ERROR            HR_E(0xCC60)")
80cpp_quote("#define IXP_E_SMTP_UNKNOWN_RESPONSE_CODE     HR_E(0xCC61)")
81cpp_quote("#define IXP_E_SMTP_500_SYNTAX_ERROR          HR_E(0xCC62)")
82cpp_quote("#define IXP_E_SMTP_501_PARAM_SYNTAX          HR_E(0xCC63)")
83cpp_quote("#define IXP_E_SMTP_502_COMMAND_NOTIMPL       HR_E(0xCC64)")
84cpp_quote("#define IXP_E_SMTP_503_COMMAND_SEQ           HR_E(0xCC65)")
85cpp_quote("#define IXP_E_SMTP_504_COMMAND_PARAM_NOTIMPL HR_E(0xCC66)")
86cpp_quote("#define IXP_E_SMTP_421_NOT_AVAILABLE         HR_E(0xCC67)")
87cpp_quote("#define IXP_E_SMTP_450_MAILBOX_BUSY          HR_E(0xCC68)")
88cpp_quote("#define IXP_E_SMTP_550_MAILBOX_NOT_FOUND     HR_E(0xCC69)")
89cpp_quote("#define IXP_E_SMTP_451_ERROR_PROCESSING      HR_E(0xCC6A)")
90cpp_quote("#define IXP_E_SMTP_551_USER_NOT_LOCAL        HR_E(0xCC6B)")
91cpp_quote("#define IXP_E_SMTP_452_NO_SYSTEM_STORAGE     HR_E(0xCC6C)")
92cpp_quote("#define IXP_E_SMTP_552_STORAGE_OVERFLOW      HR_E(0xCC6D)")
93cpp_quote("#define IXP_E_SMTP_553_MAILBOX_NAME_SYNTAX   HR_E(0xCC6E)")
94cpp_quote("#define IXP_E_SMTP_554_TRANSACT_FAILED       HR_E(0xCC6F)")
95
96/* SMTP Success Statuses */
97cpp_quote("#define IXP_E_SMTP_211_SYSTEM_STATUS         HR_S(0xCC70)")
98cpp_quote("#define IXP_E_SMTP_214_HELP_MESSAGE          HR_S(0xCC71)")
99cpp_quote("#define IXP_E_SMTP_220_READY                 HR_S(0xCC72)")
100cpp_quote("#define IXP_E_SMTP_221_CLOSING               HR_S(0xCC73)")
101cpp_quote("#define IXP_E_SMTP_250_MAIL_ACTION_OKAY      HR_S(0xCC74)")
102cpp_quote("#define IXP_E_SMTP_251_FORWARDING_MAIL       HR_S(0xCC75)")
103cpp_quote("#define IXP_E_SMTP_354_START_MAIL_INPUT      HR_S(0xCC76)")
104cpp_quote("#define IXP_E_SMTP_CONTINUE                  HR_S(0xCC77)")
105cpp_quote("#define IXP_E_SMTP_334_AUTH_READY_RESPONSE   HR_S(0xCC78)")
106cpp_quote("#define IXP_E_SMTP_245_AUTH_SUCCESS          HR_S(0xCC79)")
107
108/* More SMTP Failure Statuses */
109cpp_quote("#define IXP_E_SMTP_REJECTED_SENDER           HR_E(0xCC78)")
110cpp_quote("#define IXP_E_SMTP_REJECTED_RECIPIENTS       HR_E(0xCC79)")
111cpp_quote("#define IXP_E_SMTP_NO_SENDER                 HR_E(0xCC7A)")
112cpp_quote("#define IXP_E_SMTP_NO_RECIPIENTS             HR_E(0xCC7B)")
113cpp_quote("#define IXP_E_SMTP_530_STARTTLS_REQUIRED     HR_E(0xCC7C)")
114cpp_quote("#define IXP_E_SMTP_NO_STARTTLS_SUPPORT       HR_E(0xCC7D)")
115cpp_quote("#define IXP_E_SMTP_NO_DSN_SUPPORT            HR_E(0xCC7E)")
116cpp_quote("#define IXP_E_SMTP_454_STARTTLS_FAILED       HR_E(0xCC7F)")
117
118const SHORT CCHMAX_DOMAIN = 256;
119const SHORT CCHMAX_PHONE_NUMBER = 128;
120
121const DWORD DEFAULT_IMAP_PORT = 143;
122const DWORD DEFAULT_POP3_PORT = 110;
123const DWORD DEFAULT_SMTP_PORT = 25;
124const DWORD DEFAULT_NNTP_PORT = 119;
125
126typedef enum tagINETADDRTYPE
127{
128    ADDR_TO,
129    ADDR_FROM,
130    ADDR_DSN_NEVER = 16,
131    ADDR_DSN_SUCCESS = 32,
132    ADDR_DSN_FAILURE = 64,
133    ADDR_DSN_DELAY = 128
134} INETADDRTYPE;
135
136const DWORD ADDR_TOFROM_MASK = 0x1;
137const DWORD ADDR_DSN_MASK = 0xf0;
138
139typedef enum tagDSNRET
140{
141    DSNRET_DEFAULT,
142    DSNRET_HDRS,
143    DSNRET_FULL,
144} DSNRET;
145
146typedef struct tagINETADDR
147{
148    INETADDRTYPE addrtype;
149    CHAR szEmail[CCHMAX_EMAIL_ADDRESS];
150} INETADDR, *LPINETADDR;
151
152typedef struct tagINETADDRLIST
153{
154    ULONG cAddress;
155    LPINETADDR prgAddress;
156} INETADDRLIST, *LPINETADDRLIST;
157
158typedef enum tagRASCONNTYPE
159{
160    RAS_CONNECT_LAN,
161    RAS_CONNECT_MANUAL,
162    RAS_CONNECT_RAS
163} RASCONNTYPE;
164
165typedef enum tagHTTPMAILPROPTYPE
166{
167    HTTPMAIL_PROP_INVALID,
168    HTTPMAIL_PROP_ADBAR,
169    HTTPMAIL_PROP_CONTACTS,
170    HTTPMAIL_PROP_INBOX,
171    HTTPMAIL_PROP_OUTBOX,
172    HTTPMAIL_PROP_SENDMSG,
173    HTTPMAIL_PROP_SENTITEMS,
174    HTTPMAIL_PROP_DELETEDITEMS,
175    HTTPMAIL_PROP_DRAFTS,
176    HTTPMAIL_PROP_MSGFOLDERROOT,
177    HTTPMAIL_PROP_SIG,
178    HTTPMAIL_PROP_LAST
179} HTTPMAILPROPTYPE;
180
181typedef enum tagHTTPMAILSPECIALFOLDER
182{
183    HTTPMAIL_SF_NONE,
184    HTTPMAIL_SF_UNRECOGNIZED,
185    HTTPMAIL_SF_INBOX,
186    HTTPMAIL_SF_DELETEDITEMS,
187    HTTPMAIL_SF_DRAFTS,
188    HTTPMAIL_SF_OUTBOX,
189    HTTPMAIL_SF_SENTITEMS,
190    HTTPMAIL_SF_CONTACTS,
191    HTTPMAIL_SF_CALENDAR,
192    HTTPMAIL_SF_MSNPROMO,
193    HTTPMAIL_SF_LAST
194} HTTPMAILSPECIALFOLDER;
195
196typedef enum tagHTTPMAILCONTACTTYPE
197{
198    HTTPMAIL_CT_CONTACT,
199    HTTPMAIL_CT_GROUP,
200    HTTPMAIL_CT_LAST
201} HTTPMAILCONTACTTYPE;
202
203const DWORD DAVNAMESPACE_UNKNOWN = 0xFFFFFFFF;
204const DWORD DAVNAMESPACE_DAV = 0;
205const DWORD DAVNAMESPACE_HOTMAIL = 1;
206const DWORD DAVNAMESPACE_HTTPMAIL = 2;
207const DWORD DAVNAMESPACE_MAIL = 3;
208const DWORD DAVNAMESPACE_CONTACTS = 4;
209
210cpp_quote("#define ISF_SMTP_USEIPFORHELO        0x01")
211cpp_quote("#define ISF_ALWAYSPROMPTFORPASSWORD  0x02")
212/* for SMTP - send EHLO and use STARTTLS if available: */
213cpp_quote("#define ISF_SSLONSAMEPORT            0x04")
214cpp_quote("#define ISF_QUERYDSNSUPPORT          0x08")
215/* for SMTP - send EHLO and use AUTH if available: */
216cpp_quote("#define ISF_QUERYAUTHSUPPORT         0x10")
217
218typedef struct INETSERVER
219{
220    CHAR szAccount[CCHMAX_ACCOUNT_NAME];
221    CHAR szUserName[CCHMAX_USERNAME];
222    CHAR szPassword[CCHMAX_PASSWORD];
223    CHAR szServerName[CCHMAX_SERVER_NAME];
224    CHAR szConnectoid[CCHMAX_CONNECTOID];
225    RASCONNTYPE rasconntype;
226    DWORD dwPort;
227    BOOL fSSL;
228    BOOL fTrySicily;
229    DWORD dwTimeout;
230    DWORD dwFlags;
231} INETSERVER, *LPINETSERVER;
232
233typedef enum tagIXPTYPE
234{
235    IXP_NNTP,
236    IXP_SMTP,
237    IXP_POP3,
238    IXP_IMAP,
239    IXP_RAS,
240    IXP_HTTPMail
241} IXPTYPE;
242
243typedef enum tagIXPSTATUS
244{
245    IXP_FINDINGHOST,
246    IXP_CONNECTING,
247    IXP_SECURING,
248    IXP_CONNECTED,
249    IXP_AUTHORIZING,
250    IXP_AUTHRETRY,
251    IXP_AUTHORIZED,
252    IXP_DISCONNECTING,
253    IXP_DISCONNECTED,
254    IXP_LAST
255} IXPSTATUS;
256
257const DWORD DEPTH_INFINITY = 0xFFFFFFFE;
258
259typedef DWORD MEMBERINFOFLAGS;
260
261const MEMBERINFOFLAGS HTTP_MEMBERINFO_COMMONPROPS = 0x0;
262const MEMBERINFOFLAGS HTTP_MEMBERINFO_FOLDERPROPS = 0x1;
263const MEMBERINFOFLAGS HTTP_MEMBERINFO_MESSAGEPROPS = 0x2;
264const MEMBERINFOFLAGS HTTP_MEMBERINFO_ALLPROPS = HTTP_MEMBERINFO_FOLDERPROPS | HTTP_MEMBERINFO_MESSAGEPROPS;
265
266typedef DWORD IMAP_MSGFLAGS;
267
268const IMAP_MSGFLAGS IMAP_MSG_NOFLAGS = 0x00;
269const IMAP_MSGFLAGS IMAP_MSG_ANSWERED = 0x01;
270const IMAP_MSGFLAGS IMAP_MSG_FLAGGED = 0x02;
271const IMAP_MSGFLAGS IMAP_MSG_DELETED = 0x04;
272const IMAP_MSGFLAGS IMAP_MSG_SEEN = 0x08;
273const IMAP_MSGFLAGS IMAP_MSG_DRAFT = 0x10;
274const IMAP_MSGFLAGS IMAP_MSG_ALLFLAGS = 0x1f;
275
276[
277    object,
278    uuid(CA30F3FF-C9AC-11D1-9A3A-00C04FA309D4),
279    local
280]
281interface ITransportCallbackService : IUnknown
282{
283    HRESULT GetParentWindow(
284        [in]    DWORD dwReserved,
285        [out]   HWND *phwndParent);
286
287    HRESULT GetAccount(
288        [out]   LPDWORD pdwServerType,
289        [out]   IImnAccount **ppAccount);
290}
291
292[
293    object,
294    uuid(0DF2C7E1-3435-11D0-81D0-00C04FD85AB4),
295    local
296]
297interface ITransportCallback : IUnknown
298{
299    typedef struct tagIXPRESULT
300    {
301        HRESULT hrResult;
302        LPSTR pszResponse;
303        UINT uiServerError;
304        HRESULT hrServerError;
305        DWORD dwSocketError;
306        LPSTR pszProblem;
307    } IXPRESULT, *LPIXPRESULT;
308
309    typedef enum tagCMDTYPE
310    {
311        CMD_SEND,
312        CMD_RESP
313    } CMDTYPE;
314
315    HRESULT OnTimeout(
316        [in,out]    DWORD *pdwTimeout,
317        [in]        IInternetTransport *pTransport);
318
319    HRESULT OnLogonPrompt(
320        [in,out]    LPINETSERVER pInetServer,
321        [in]        IInternetTransport *pTransport);
322
323    INT OnPrompt(
324        [in]    HRESULT hrError,
325        [in]    LPCSTR pszText,
326        [in]    LPCSTR pszCaption,
327        [in]    UINT uType,
328        [in]    IInternetTransport *pTransport);
329
330    HRESULT OnStatus(
331        [in]    IXPSTATUS ixpstatus,
332        [in]    IInternetTransport *pTransport);
333
334    HRESULT OnError(
335        [in]    IXPSTATUS ixpstatus,
336        [in]    LPIXPRESULT pResult,
337        [in]    IInternetTransport *pTransport);
338
339    HRESULT OnCommand(
340        [in]    CMDTYPE cmdtype,
341        [in]    LPSTR pszLine,
342        [in]    HRESULT hrResponse,
343        [in]    IInternetTransport *pTransport);
344}
345
346[
347    object,
348    uuid(1F636C01-364E-11D0-81D3-00C04FD85AB4),
349    local
350]
351interface IInternetTransport : IUnknown
352{
353    const boolean iitAUTHENTICATE = TRUE;
354    const boolean iitDONT_AUTHENTICATe = FALSE;
355    const boolean iitENABLE_ONCOMMAND = TRUE;
356    const boolean iitDISABLE_ONCOMMAND = FALSE;
357
358    typedef enum tagIXPISSTATE
359    {
360        IXP_IS_CONNECTED,
361        IXP_IS_BUSY,
362        IXP_IS_READY,
363        IXP_IS_AUTHENTICATED
364    } IXPISSTATE;
365
366    HRESULT GetServerInfo(
367        [in,out]    LPINETSERVER pInetServer);
368
369    IXPTYPE GetIXPType();
370
371    HRESULT IsState(
372        [in]    IXPISSTATE isstate);
373
374    HRESULT InetServerFromAccount(
375        [in]        IImnAccount *pAccount,
376        [in,out]    LPINETSERVER pInetServer);
377
378    HRESULT Connect(
379        [in]    LPINETSERVER pInetServer,
380        [in]    boolean fAuthenticate,
381        [in]    boolean fCommandLogging);
382
383    HRESULT HandsOffCallback();
384
385    HRESULT Disconnect();
386
387    HRESULT DropConnection();
388
389    HRESULT GetStatus(
390        [out]   IXPSTATUS *pCurrentStatus);
391}
392
393[
394    object,
395    uuid(1F636C02-364E-11D0-81D3-00C04FD85AB4),
396    local
397]
398interface ISMTPCallback : ITransportCallback
399{
400    typedef enum tagSMTPCOMMAND
401    {
402        SMTP_NONE,
403        SMTP_BANNER,
404        SMTP_CONNECTED,
405        SMTP_SEND_MESSAGE,
406        SMTP_AUTH,
407        SMTP_EHLO,
408        SMTP_HELO,
409        SMTP_MAIL,
410        SMTP_RCPT,
411        SMTP_RSET,
412        SMTP_QUIT,
413        SMTP_DATA,
414        SMTP_DOT,
415        SMTP_SEND_STREAM,
416        SMTP_CUSTOM
417    } SMTPCOMMAND;
418
419    typedef struct tagSMTPSTREAM
420    {
421        DWORD cbIncrement;
422        DWORD cbCurrent;
423        DWORD cbTotal;
424    } SMTPSTREAM, *LPSMTPSTREAM;
425
426    typedef struct tagSMTPRESPONSE
427    {
428        SMTPCOMMAND command;
429        BOOL fDone;
430        IXPRESULT rIxpResult;
431        ISMTPTransport *pTransport;
432
433        [switch_type(SMTPCOMMAND), switch_is(command)]
434        union
435        {
436        [case(SMTP_SEND_STREAM)]    SMTPSTREAM rStreamInfo;
437        [default];
438        } DUMMYUNIONNAME;
439    } SMTPRESPONSE, *LPSMTPRESPONSE;
440
441    HRESULT OnResponse(
442        [in] LPSMTPRESPONSE pResponse);
443}
444
445[
446    object,
447    uuid(0DF2C7E2-3435-11D0-81D0-00C04FD85AB4),
448    local
449]
450interface ISMTPTransport : IInternetTransport
451{
452    typedef struct tagSMTPMESSAGE
453    {
454        ULONG cbSize;
455        LPSTREAM pstmMsg;
456        INETADDRLIST rAddressList;
457    } SMTPMESSAGE, *LPSMTPMESSAGE;
458
459    HRESULT InitNew(
460        [in]    LPSTR pszLogFilePath,
461        [in]    ISMTPCallback *pCallback);
462
463cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
464cpp_quote("#undef SendMessage")
465cpp_quote("#endif")
466
467    HRESULT SendMessage(
468        [in]    LPSMTPMESSAGE pMessage);
469
470    HRESULT CommandMAIL(
471        [in]    LPSTR pszEmailFrom);
472
473    HRESULT CommandRCPT(
474        [in]    LPSTR pszEmailTo);
475
476    HRESULT CommandEHLO();
477
478    HRESULT CommandHELO();
479
480    HRESULT CommandAUTH(
481        [in]    LPSTR pszAuthType);
482
483    HRESULT CommandQUIT();
484
485    HRESULT CommandRSET();
486
487    HRESULT CommandDATA();
488
489    HRESULT CommandDOT();
490
491    HRESULT SendDataStream(
492        [in]    IStream *pStream,
493        [in]    ULONG cbSize);
494}
495
496[
497    object,
498    uuid(0DF2C7EC-3435-11D0-81D0-00C04FD85AB4),
499    local
500]
501interface ISMTPTransport2 : ISMTPTransport
502{
503    typedef struct tagSMTPMESSAGE2
504    {
505        SMTPMESSAGE smtpMsg;
506        LPSTR pszDSNENVID;
507        DSNRET dsnRet;
508        DWORD dwReserved;
509        DWORD dwReserved2;
510    } SMTPMESSAGE2, *LPSMTPMESSAGE2;
511
512    HRESULT SetWindow();
513
514    HRESULT ResetWindow();
515
516    HRESULT SendMessage2(
517        [in]    LPSMTPMESSAGE2 pMessage);
518
519    HRESULT CommandRCPT2(
520        [in]    LPSTR pszEmailTo,
521        [in]    INETADDRTYPE atDSN);
522}
523
524/* FIXME: IDAVNamespaceArbiter, IPropPatchRequest, IPropFindRequest, IPropFindMultiResponse, IPropFindResponse, IHTTPMailCallback, IHTTPMailTransport */
525
526[
527    object,
528    uuid(0DF2C7E3-3435-11D0-81D0-00C04FD85AB4),
529    local
530]
531interface IPOP3Callback : ITransportCallback
532{
533    typedef enum tagPOP3COMMAND
534    {
535        POP3_NONE,
536        POP3_BANNER,
537        POP3_CONNECTED,
538        POP3_USER,
539        POP3_PASS,
540        POP3_AUTH,
541        POP3_UIDL,
542        POP3_STAT,
543        POP3_LIST,
544        POP3_DELE,
545        POP3_RETR,
546        POP3_TOP,
547        POP3_NOOP,
548        POP3_QUIT,
549        POP3_RSET,
550        POP3_CUSTOM
551    } POP3COMMAND;
552
553    typedef struct tagPOP3RETR
554    {
555        BOOL fHeader;
556        BOOL fBody;
557        DWORD dwPopId;
558        DWORD cbSoFar;
559        LPSTR pszLines;
560        ULONG cbLines;
561    } POP3RETR, *LPPOP3RETR;
562
563    typedef struct tagPOP3TOP
564    {
565        BOOL fHeader;
566        BOOL fBody;
567        DWORD dwPopId;
568        DWORD cPreviewLines;
569        DWORD cbSoFar;
570        LPSTR pszLines;
571        ULONG cbLines;
572    } POP3TOP, *LPPOP3TOP;
573
574    typedef struct tagPOP3LIST
575    {
576        DWORD dwPopId;
577        DWORD cbSize;
578    } POP3LIST, *LPPOP3LIST;
579
580    typedef struct tagPOP3UIDL
581    {
582        DWORD dwPopId;
583        LPSTR pszUidl;
584    } POP3UIDL, *LPPOP3UIDL;
585
586    typedef struct tagPOP3STAT
587    {
588        DWORD cMessages;
589        DWORD cbMessages;
590    } POP3STAT, *LPPOP3STAT;
591
592    typedef struct tagPOP3RESPONSE
593    {
594        POP3COMMAND command;
595        BOOL fDone;
596        IXPRESULT rIxpResult;
597        IPOP3Transport *pTransport;
598        BOOL fValidInfo;
599        [switch_type(POP3COMMAND), switch_is(command)]
600        union
601        {
602        [case(POP3_UIDL)] POP3UIDL rUidlInfo;
603        [case(POP3_STAT)] POP3STAT rStatInfo;
604        [case(POP3_LIST)] POP3LIST rListInfo;
605        [case(POP3_DELE)] DWORD dwPopId;
606        [case(POP3_RETR)] POP3RETR rRetrInfo;
607        [case(POP3_TOP)]  POP3TOP rTopInfo;
608        [default];
609        } DUMMYUNIONNAME;
610    } POP3RESPONSE, *LPPOP3RESPONSE;
611
612    HRESULT OnResponse(
613        [in]    LPPOP3RESPONSE pResponse);
614}
615
616[
617    object,
618    uuid(0DF2C7E4-3435-11D0-81D0-00C04FD85AB4),
619    local
620]
621interface IPOP3Transport : IInternetTransport
622{
623    typedef enum tagPOP3CMDTYPE
624    {
625        POP3CMD_GET_POPID,
626        POP3CMD_GET_MARKED,
627        POP3CMD_GET_ALL
628    } POP3CMDTYPE;
629
630    typedef enum tagPOP3MARKTYPE
631    {
632        POP3_MARK_FOR_TOP = 0x01,
633        POP3_MARK_FOR_RETR = 0x02,
634        POP3_MARK_FOR_DELE = 0x04,
635        POP3_MARK_FOR_UIDL = 0x08,
636        POP3_MARK_FOR_LIST = 0x10
637    } POP3MARKTYPE;
638
639    HRESULT InitNew(
640        [in]    LPSTR pszLogFilePath,
641        [in]    IPOP3Callback *pCallback);
642
643    HRESULT MarkItem(
644        [in]    POP3MARKTYPE marktype,
645        [in]    DWORD dwPopId,
646        [in]    boolean fMarked);
647
648    HRESULT CommandAUTH(
649        [in]    LPSTR pszAuthType);
650
651    HRESULT CommandUSER(
652        [in]    LPSTR pszUserName);
653
654    HRESULT CommandPASS(
655        [in]    LPSTR pszPassword);
656
657    HRESULT CommandLIST(
658        [in]    POP3CMDTYPE cmdtype,
659        [in]    DWORD dwPopId);
660
661    HRESULT CommandTOP(
662        [in]    POP3CMDTYPE cmdtype,
663        [in]    DWORD dwPopId,
664        [in]    DWORD cPreviewLines);
665
666    HRESULT CommandQUIT();
667
668    HRESULT CommandSTAT();
669
670    HRESULT CommandNOOP();
671
672    HRESULT CommandRSET();
673
674    HRESULT CommandUIDL(
675        [in]    POP3CMDTYPE cmdtype,
676        [in]    DWORD dwPopId);
677
678    HRESULT CommandDELE(
679        [in]    POP3CMDTYPE cmdtype,
680        [in]    DWORD dwPopId);
681
682    HRESULT CommandRETR(
683        [in]    POP3CMDTYPE cmdtype,
684        [in]    DWORD dwPopId);
685}
686
687/* FIXME: INNTPCallback, INNTPTransport */
688
689[
690    object,
691    uuid(8C438160-4EF6-11d0-874F-00AA00530EE9),
692    local,
693]
694interface IRangeList : IUnknown
695{
696    const ULONG RL_RANGE_ERROR = ((ULONG)-1);
697    const ULONG RL_LAST_MESSAGE = ((ULONG)-1);
698
699    HRESULT Clear();
700
701    HRESULT IsInRange(
702        [in]    const ULONG value);
703
704    HRESULT Min(
705        [out]   ULONG *pulMin);
706
707    HRESULT Max(
708        [out]   ULONG *pulMax);
709
710    HRESULT Save(
711        [out]   byte **ppbDestination,
712        [out]   ULONG *pulSizeOfDestination);
713
714    HRESULT Load(
715        [in, size_is(ulSizeOfSource)]   byte *pbSource,
716        [in]    const ULONG ulSizeOfSource);
717
718    HRESULT AddRange(
719        [in]    const ULONG low,
720        [in]    const ULONG high);
721
722    HRESULT AddSingleValue(
723        [in]    const ULONG value);
724
725    HRESULT AddRangeList(
726        [in]    const IRangeList *prl);
727
728    HRESULT DeleteRange(
729        [in]    const ULONG low,
730        [in]    const ULONG high);
731
732    HRESULT DeleteSingleValue(
733        [in]    const ULONG value);
734
735    HRESULT DeleteRangeList(
736        [in]    const IRangeList *prl);
737
738    HRESULT MinOfRange(
739        [in]    const ULONG value,
740        [out]   ULONG *pulMinOfRange);
741
742    HRESULT MaxOfRange(
743        [in]    const ULONG value,
744        [out]   ULONG *pulMaxOfRange);
745
746    HRESULT RangeToIMAPString(
747        [out]   LPSTR *ppszDestination,
748        [out]   LPDWORD pdwLengthOfDestination);
749
750    HRESULT Next(
751        [in]    const ULONG current,
752        [out]   ULONG *pulNext);
753
754    HRESULT Prev(
755        [in]    const ULONG current,
756        [out]   ULONG *pulPrev);
757
758    HRESULT Cardinality(
759        [out]   ULONG *pulCardinality);
760
761    HRESULT CardinalityFrom(
762        [in]    const ULONG ulStartPoint,
763        [out]   ULONG *pulCardinalityFrom);
764}
765
766[
767    object,
768    uuid(E9E9D8A3-4EDD-11d0-874F-00AA00530EE9),
769    local
770]
771interface IIMAPCallback : ITransportCallback
772{
773    typedef DWORD IMAP_MBOXFLAGS;
774    const IMAP_MBOXFLAGS IMAP_MBOX_NOFLAGS = 0x0;
775    const IMAP_MBOXFLAGS IMAP_MBOX_MARKED = 0x1;
776    const IMAP_MBOXFLAGS IMAP_MBOX_NOINFERIORS = 0x2;
777    const IMAP_MBOXFLAGS IMAP_MBOX_NOSELECT = 0x4;
778    const IMAP_MBOXFLAGS IMAP_MBOX_UNMARKED = 0x8;
779    const IMAP_MBOXFLAGS IMAP_MBOX_ALLFLAGS = 0xf;
780
781    typedef enum tagIMAP_RESPONSE_TYPE
782    {
783        irtERROR_NOTIFICATION,
784        irtCOMMAND_COMPLETION,
785        irtSERVER_ALERT,
786        irtPARSE_ERROR,
787        irtMAILBOX_UPDATE,
788        irtDELETED_MSG,
789        irtFETCH_BODY,
790        irtUPDATE_MSG,
791        irtAPPLICABLE_FLAGS,
792        irtPERMANENT_FLAGS,
793        irtUIDVALIDITY,
794        irtREADWRITE_STATUS,
795        irtTRYCREATE,
796        irtSEARCH,
797        irtMAILBOX_LISTING,
798        irtMAILBOX_STATUS,
799        irtAPPEND_PROGRESS,
800        irtUPDATE_MSG_EX
801    } IMAP_RESPONSE_TYPE;
802
803    typedef struct tagFETCH_BODY_PART
804    {
805        DWORD dwMsgSeqNum;
806        LPSTR pszBodyTag;
807        DWORD dwTotalBytes;
808        DWORD dwSizeOfData;
809        DWORD dwOffset;
810        BOOL fDone;
811        LPSTR pszData;
812        LPARAM lpFetchCookie1;
813        LPARAM lpFetchCookie2;
814    } FETCH_BODY_PART;
815
816    typedef struct tagFETCH_CMD_RESULTS
817    {
818        DWORD dwMsgSeqNum;
819        BOOL bMsgFlags;
820        IMAP_MSGFLAGS mfMsgFlags;
821        BOOL bRFC822Size;
822        DWORD dwRFC822Size;
823        BOOL bUID;
824        DWORD dwUID;
825        BOOL bInternalDate;
826        FILETIME ftInternalDate;
827        LPARAM lpFetchCookie1;
828        LPARAM lpFetchCookie2;
829    } FETCH_CMD_RESULTS;
830
831    typedef struct tagIMAPADDR
832    {
833        LPSTR pszName;
834        LPSTR pszADL;
835        LPSTR pszMailbox;
836        LPSTR pszHost;
837        struct tagIMAPADDR *pNext;
838    } IMAPADDR;
839
840    typedef struct tagFETCH_CMD_RESULTS_EX
841    {
842        DWORD dwMsgSeqNum;
843        BOOL bMsgFlags;
844        IMAP_MSGFLAGS mfMsgFlags;
845        BOOL bRFC822Size;
846        DWORD dwRFC822Size;
847        BOOL bUID;
848        DWORD dwUID;
849        BOOL bInternalDate;
850        FILETIME ftInternalDate;
851        LPARAM lpFetchCookie1;
852        LPARAM lpFetchCookie2;
853        BOOL bEnvelope;
854        FILETIME ftENVDate;
855        LPSTR pszENVSubject;
856        IMAPADDR *piaENVFrom;
857        IMAPADDR *piaENVSender;
858        IMAPADDR *piaENVReplyTo;
859        IMAPADDR *piaENVTo;
860        IMAPADDR *piaENVCc;
861        IMAPADDR *piaENVBcc;
862        LPSTR pszENVInReplyTo;
863        LPSTR pszENVMessageID;
864        DWORD dwReserved1;
865        DWORD dwReserved2;
866        DWORD dwReserved3;
867    } FETCH_CMD_RESULTS_EX;
868
869    typedef struct tagMBOX_MSGCOUNT
870    {
871        BOOL bGotExistsResponse;
872        DWORD dwExists;
873        BOOL bGotRecentResponse;
874        DWORD dwRecent;
875        BOOL bGotUnseenResponse;
876        DWORD dwUnseen;
877    } MBOX_MSGCOUNT;
878
879    typedef struct tagIMAP_LISTLSUB_RESPONSE
880    {
881        LPSTR pszMailboxName;
882        IMAP_MBOXFLAGS imfMboxFlags;
883        char cHierarchyChar;
884    } IMAP_LISTLSUB_RESPONSE;
885
886    typedef struct tagIMAP_STATUS_RESPONSE
887    {
888        LPSTR pszMailboxName;
889        BOOL fMessages;
890        DWORD dwMessages;
891        BOOL fRecent;
892        DWORD dwRecent;
893        BOOL fUIDNext;
894        DWORD dwUIDNext;
895        BOOL fUIDValidity;
896        DWORD dwUIDValidity;
897        BOOL fUnseen;
898        DWORD dwUnseen;
899    } IMAP_STATUS_RESPONSE;
900
901    typedef struct tagAPPEND_PROGRESS
902    {
903        DWORD dwUploaded;
904        DWORD dwTotal;
905    } APPEND_PROGRESS;
906
907    typedef [switch_type(IMAP_RESPONSE_TYPE)] union tagIMAP_RESPONSE_DATA
908    {
909        [case (irtMAILBOX_UPDATE)] MBOX_MSGCOUNT *pmcMsgCount;
910        [case (irtDELETED_MSG)] DWORD dwDeletedMsgSeqNum;
911        [case (irtFETCH_BODY)] FETCH_BODY_PART *pFetchBodyPart;
912        [case (irtUPDATE_MSG)] FETCH_CMD_RESULTS *pFetchResults;
913        [case (irtAPPLICABLE_FLAGS, irtPERMANENT_FLAGS)] IMAP_MSGFLAGS imfImapMessageFlags;
914        [case (irtUIDVALIDITY)] DWORD dwUIDValidity;
915        [case (irtREADWRITE_STATUS)] BOOL bReadWrite;
916        [case (irtSEARCH)] IRangeList *prlSearchResults;
917        [case (irtMAILBOX_LISTING)] IMAP_LISTLSUB_RESPONSE illrdMailboxListing;
918        [case (irtMAILBOX_STATUS)] IMAP_STATUS_RESPONSE *pisrStatusResponse;
919        [case (irtAPPEND_PROGRESS)] APPEND_PROGRESS *papAppendProgress;
920        [case (irtUPDATE_MSG_EX)] FETCH_CMD_RESULTS_EX *pFetchResultsEx;
921    } IMAP_RESPONSE_DATA;
922
923    typedef struct tagIMAP_RESPONSE
924    {
925        WPARAM wParam;
926        LPARAM lParam;
927        HRESULT hrResult;
928        LPSTR lpszResponseText;
929        IMAP_RESPONSE_TYPE irtResponseType;
930        [switch_is(irtResponseType)] IMAP_RESPONSE_DATA irdResponseData;
931    } IMAP_RESPONSE;
932
933    HRESULT OnResponse([in] const IMAP_RESPONSE *pirIMAPResponse);
934}
935
936[
937object,
938uuid(E9E9D8A8-4EDD-11d0-874F-00AA00530EE9),
939local,
940]
941interface IIMAPTransport : IInternetTransport
942{
943    const DWORD IMAP_CAPABILITY_IMAP4 = 0x1;
944    const DWORD IMAP_CAPABILITY_IMAP4rev1 = 0x2;
945    const DWORD IMAP_CAPABILITY_IDLE = 0x4;
946    const DWORD IMAP_CAPABILITY_ALLFLAGS = 0x7;
947
948    HRESULT InitNew(
949        [in]    LPSTR pszLogFilePath,
950        [in]    IIMAPCallback *pCBHandler);
951
952    HRESULT NewIRangeList(
953        [out]   IRangeList **pprlNewRangeList);
954
955    HRESULT Capability(
956        [out]   DWORD *pdwCapabilityFlags);
957
958    HRESULT Select(
959        [in]    WPARAM wParam,
960        [in]    LPARAM lParam,
961        [in]    IIMAPCallback *pCBHandler,
962        [in]    LPSTR lpszMailboxName);
963
964    HRESULT Examine(
965        [in]    WPARAM wParam,
966        [in]    LPARAM lParam,
967        [in]    IIMAPCallback *pCBHandler,
968        [in]    LPSTR lpszMailboxName);
969
970    HRESULT Create(
971        [in]    WPARAM wParam,
972        [in]    LPARAM lParam,
973        [in]    IIMAPCallback *pCBHandler,
974        [in]    LPSTR lpszMailboxName);
975
976    HRESULT Delete(
977        [in]    WPARAM wParam,
978        [in]    LPARAM lParam,
979        [in]    IIMAPCallback *pCBHandler,
980        [in]    LPSTR lpszMailboxName);
981
982    HRESULT Rename(
983        [in]    WPARAM wParam,
984        [in]    LPARAM lParam,
985        [in]    IIMAPCallback *pCBHandler,
986        [in]    LPSTR lpszMailboxName,
987        [in]    LPSTR lpszNewMailboxName);
988
989    HRESULT Subscribe(
990        [in]    WPARAM wParam,
991        [in]    LPARAM lParam,
992        [in]    IIMAPCallback *pCBHandler,
993        [in]    LPSTR lpszMailboxName);
994
995    HRESULT Unsubscribe(
996        [in]    WPARAM wParam,
997        [in]    LPARAM lParam,
998        [in]    IIMAPCallback *pCBHandler,
999        [in]    LPSTR lpszMailboxName);
1000
1001    HRESULT List(
1002        [in]    WPARAM wParam,
1003        [in]    LPARAM lParam,
1004        [in]    IIMAPCallback *pCBHandler,
1005        [in]    LPSTR lpszMailboxNameReference,
1006        [in]    LPSTR lpszMailboxNamePattern);
1007
1008    HRESULT Lsub(
1009        [in]    WPARAM wParam,
1010        [in]    LPARAM lParam,
1011        [in]    IIMAPCallback *pCBHandler,
1012        [in]    LPSTR lpszMailboxNameReference,
1013        [in]    LPSTR lpszMailboxNamePattern);
1014
1015    HRESULT Append(
1016        [in]    WPARAM wParam,
1017        [in]    LPARAM lParam,
1018        [in]    IIMAPCallback *pCBHandler,
1019        [in]    LPSTR lpszMailboxName,
1020        [in]    LPSTR lpszMessageFlags,
1021        [in]    FILETIME ftMessageDateTime,
1022        [in]    LPSTREAM lpstmMessageToSave);
1023
1024    HRESULT Close(
1025        [in]    WPARAM wParam,
1026        [in]    LPARAM lParam,
1027        [in]    IIMAPCallback *pCBHandler);
1028
1029    HRESULT Expunge(
1030        [in]    WPARAM wParam,
1031        [in]    LPARAM lParam,
1032        [in]    IIMAPCallback *pCBHandler);
1033
1034    HRESULT Search(
1035        [in]    WPARAM wParam,
1036        [in]    LPARAM lParam,
1037        [in]    IIMAPCallback *pCBHandler,
1038        [in]    LPSTR lpszSearchCriteria,
1039        [in]    boolean bReturnUIDs,
1040        [in]    IRangeList *pMsgRange,
1041        [in]    boolean bUIDRangeList);
1042
1043    HRESULT Fetch(
1044        [in]    WPARAM wParam,
1045        [in]    LPARAM lParam,
1046        [in]    IIMAPCallback *pCBHandler,
1047        [in]    IRangeList *pMsgRange,
1048        [in]    boolean bUIDMsgRange,
1049        [in]    LPSTR lpszFetchArgs);
1050
1051    HRESULT Store(
1052        [in]    WPARAM wParam,
1053        [in]    LPARAM lParam,
1054        [in]    IIMAPCallback *pCBHandler,
1055        [in]    IRangeList *pMsgRange,
1056        [in]    boolean bUIDRangeList,
1057        [in]    LPSTR lpszStoreArgs);
1058
1059    HRESULT Copy(
1060        [in]    WPARAM wParam,
1061        [in]    LPARAM lParam,
1062        [in]    IIMAPCallback *pCBHandler,
1063        [in]    IRangeList *pMsgRange,
1064        [in]    boolean bUIDRangeList,
1065        [in]    LPSTR lpszMailboxName);
1066
1067    HRESULT Noop(
1068        [in]    WPARAM wParam,
1069        [in]    LPARAM lParam,
1070        [in]    IIMAPCallback *pCBHandler);
1071
1072    HRESULT ResizeMsgSeqNumTable(
1073        [in]    DWORD dwSizeOfMbox);
1074
1075    HRESULT UpdateSeqNumToUID(
1076        [in]    DWORD dwMsgSeqNum,
1077        [in]    DWORD dwUID);
1078
1079    HRESULT RemoveSequenceNum(
1080        [in]    DWORD dwDeletedMsgSeqNum);
1081
1082    HRESULT MsgSeqNumToUID(
1083        [in]    DWORD dwMsgSeqNum,
1084        [out]   DWORD *pdwUID);
1085
1086    HRESULT GetMsgSeqNumToUIDArray(
1087        [out]   DWORD **ppdwMsgSeqNumToUIDArray,
1088        [out]   DWORD *pdwNumberOfElements);
1089
1090    HRESULT GetHighestMsgSeqNum(
1091        [out]   DWORD *pdwHighestMSN);
1092
1093    HRESULT ResetMsgSeqNumToUID();
1094
1095    HRESULT SetDefaultCBHandler(
1096        [in]    IIMAPCallback *pCBHandler);
1097
1098    HRESULT Status(
1099        [in]    WPARAM wParam,
1100        [in]    LPARAM lParam,
1101        [in]    IIMAPCallback *pCBHandler,
1102        [in]    LPSTR pszMailboxName,
1103        [in]    LPSTR pszStatusCmdArgs);
1104}
1105
1106#if 0
1107cpp_quote("HRESULT WINAPI CreateRASTransport(IRASTransport **ppTransport);")
1108cpp_quote("HRESULT WINAPI CreateNNTPTransport(INNTPTransport **ppTransport);")
1109cpp_quote("HRESULT WINAPI CreateIMAPTransport2(IIMAPTransport2 **ppTransport);")
1110#endif
1111cpp_quote("HRESULT WINAPI CreateRangeList(IRangeList **ppRangeList);")
1112cpp_quote("HRESULT WINAPI CreateSMTPTransport(ISMTPTransport **ppTransport);")
1113cpp_quote("HRESULT WINAPI CreatePOP3Transport(IPOP3Transport **ppTransport);")
1114cpp_quote("HRESULT WINAPI CreateIMAPTransport(IIMAPTransport **ppTransport);")
1115