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