wine/include/imnxport.idl
Rob Shearman d9b84d2c45 include: Add explicit DUMMYUNIONNAME and DUMMYSTRUCTNAME names to anonymous unions in IDL files.
These aren't present in the PSDK versions of these files but are
necessary for us to be able to compile Wine with compilers that don't
support anonymous structs and unions.
2008-09-18 14:18:21 +02:00

699 lines
20 KiB
Text

/*
* Copyright 2006 Robert Shearman for CodeWeavers
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
import "imnact.idl";
interface IInternetTransport;
interface ISMTPTransport;
interface IPOP3Transport;
/* CLSIDs */
cpp_quote("DEFINE_GUID(CLSID_IInternetMessageUrl, 0xca30cc91, 0xb1b3, 0x11d0, 0x85, 0xd0, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
cpp_quote("DEFINE_GUID(CLSID_ISMTPTransport, 0xfd853ce6, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
cpp_quote("DEFINE_GUID(CLSID_IPOP3Transport, 0xfd853ce7, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
cpp_quote("DEFINE_GUID(CLSID_INNTPTransport, 0xfd853ce8, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
cpp_quote("DEFINE_GUID(CLSID_IRASTransport, 0xfd853ce9, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
cpp_quote("DEFINE_GUID(CLSID_IRangeList, 0xfd853cea, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
cpp_quote("DEFINE_GUID(CLSID_IIMAPTransport, 0xfd853ceb, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
cpp_quote("DEFINE_GUID(CLSID_IHTTPMailTransport, 0x5a580c11, 0xe5eb, 0x11d1, 0xa8, 0x6e, 0x00, 0x00, 0xf8, 0x08, 0x4f, 0x96);")
cpp_quote("DEFINE_GUID(CLSID_IPropFindRequest, 0xbb847b8a, 0x054a, 0x11d2, 0xa8, 0x94, 0x00, 0x00, 0xf8, 0x08, 0x4f, 0x96);")
cpp_quote("DEFINE_GUID(CLSID_IPropPatchRequest, 0xea678830, 0x235d, 0x11d2, 0xa8, 0xb6, 0x00, 0x00, 0xf8, 0x08, 0x4f, 0x96);")
/* Error Codes */
cpp_quote("#ifndef HR_E")
cpp_quote("#define HR_E(n) MAKE_SCODE(SEVERITY_ERROR, FACILITY_INTERNET, n)")
cpp_quote("#endif")
cpp_quote("#ifndef HR_S")
cpp_quote("#define HR_S(n) MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_INTERNET, n)")
cpp_quote("#endif")
/* General Error Codes */
cpp_quote("#define IXP_E_LOAD_SICILY_FAILED HR_E(0xCC00)")
cpp_quote("#define IXP_E_INVALID_CERT_CN HR_E(0xCC01)")
cpp_quote("#define IXP_E_INVALID_CERT_DATE HR_E(0xCC02)")
cpp_quote("#define IXP_E_ALREADY_CONNECTED HR_E(0xCC03)")
cpp_quote("#define IXP_E_CONN HR_E(0xCC04)")
cpp_quote("#define IXP_E_NOT_CONNECTED HR_E(0xCC05)")
cpp_quote("#define IXP_E_CONN_SEND HR_E(0xCC06)")
cpp_quote("#define IXP_E_WOULD_BLOCK HR_E(0xCC07)")
cpp_quote("#define IXP_E_INVALID_STATE HR_E(0xCC08)")
cpp_quote("#define IXP_E_CONN_RECV HR_E(0xCC09)")
cpp_quote("#define IXP_E_INCOMPLETE HR_E(0xCC0A)")
cpp_quote("#define IXP_E_BUSY HR_E(0xCC0B)")
cpp_quote("#define IXP_E_NOT_INIT HR_E(0xCC0C)")
cpp_quote("#define IXP_E_CANT_FIND_HOST HR_E(0xCC0D)")
cpp_quote("#define IXP_E_FAILED_TO_CONNECT HR_E(0xCC0E)")
cpp_quote("#define IXP_E_CONNECTION_DROPPED HR_E(0xCC0F)")
cpp_quote("#define IXP_E_INVALID_ADDRESS HR_E(0xCC10)")
cpp_quote("#define IXP_E_INVALID_ADDRESS_LIST HR_E(0xCC11)")
cpp_quote("#define IXP_E_SOCKET_READ_ERROR HR_E(0xCC12)")
cpp_quote("#define IXP_E_SOCKET_WRITE_ERROR HR_E(0xCC13)")
cpp_quote("#define IXP_E_SCOKET_INIT_ERROR HR_E(0xCC14)")
cpp_quote("#define IXP_E_SOCKET_CONNECT_ERROR HR_E(0xCC15)")
cpp_quote("#define IXP_E_INVALID_ACCOUNT HR_E(0xCC16)")
cpp_quote("#define IXP_E_USER_CANCEL HR_E(0xCC17)")
cpp_quote("#define IXP_E_SICILY_LOGON_FAILED HR_E(0xCC18)")
cpp_quote("#define IXP_E_TIMEOUT HR_E(0xCC19)")
cpp_quote("#define IXP_E_SECURE_CONNECT_FAILED HR_E(0xCC1A)")
/* SMTP Failure Statuses */
cpp_quote("#define IXP_E_SMTP_RESPONSE_ERROR HR_E(0xCC60)")
cpp_quote("#define IXP_E_SMTP_UNKNOWN_RESPONSE_CODE HR_E(0xCC61)")
cpp_quote("#define IXP_E_SMTP_500_SYNTAX_ERROR HR_E(0xCC62)")
cpp_quote("#define IXP_E_SMTP_501_PARAM_SYNTAX HR_E(0xCC63)")
cpp_quote("#define IXP_E_SMTP_502_COMMAND_NOTIMPL HR_E(0xCC64)")
cpp_quote("#define IXP_E_SMTP_503_COMMAND_SEQ HR_E(0xCC65)")
cpp_quote("#define IXP_E_SMTP_504_COMMAND_PARAM_NOTIMPL HR_E(0xCC66)")
cpp_quote("#define IXP_E_SMTP_421_NOT_AVAILABLE HR_E(0xCC67)")
cpp_quote("#define IXP_E_SMTP_450_MAILBOX_BUSY HR_E(0xCC68)")
cpp_quote("#define IXP_E_SMTP_550_MAILBOX_NOT_FOUND HR_E(0xCC69)")
cpp_quote("#define IXP_E_SMTP_451_ERROR_PROCESSING HR_E(0xCC6A)")
cpp_quote("#define IXP_E_SMTP_551_USER_NOT_LOCAL HR_E(0xCC6B)")
cpp_quote("#define IXP_E_SMTP_452_NO_SYSTEM_STORAGE HR_E(0xCC6C)")
cpp_quote("#define IXP_E_SMTP_552_STORAGE_OVERFLOW HR_E(0xCC6D)")
cpp_quote("#define IXP_E_SMTP_553_MAILBOX_NAME_SYNTAX HR_E(0xCC6E)")
cpp_quote("#define IXP_E_SMTP_554_TRANSACT_FAILED HR_E(0xCC6F)")
/* SMTP Success Statuses */
cpp_quote("#define IXP_E_SMTP_211_SYSTEM_STATUS HR_S(0xCC70)")
cpp_quote("#define IXP_E_SMTP_214_HELP_MESSAGE HR_S(0xCC71)")
cpp_quote("#define IXP_E_SMTP_220_READY HR_S(0xCC72)")
cpp_quote("#define IXP_E_SMTP_221_CLOSING HR_S(0xCC73)")
cpp_quote("#define IXP_E_SMTP_250_MAIL_ACTION_OKAY HR_S(0xCC74)")
cpp_quote("#define IXP_E_SMTP_251_FORWARDING_MAIL HR_S(0xCC75)")
cpp_quote("#define IXP_E_SMTP_354_START_MAIL_INPUT HR_S(0xCC76)")
cpp_quote("#define IXP_E_SMTP_CONTINUE HR_S(0xCC77)")
cpp_quote("#define IXP_E_SMTP_334_AUTH_READY_RESPONSE HR_S(0xCC78)")
cpp_quote("#define IXP_E_SMTP_245_AUTH_SUCCESS HR_S(0xCC79)")
/* More SMTP Failure Statuses */
cpp_quote("#define IXP_E_SMTP_REJECTED_SENDER HR_E(0xCC78)")
cpp_quote("#define IXP_E_SMTP_REJECTED_RECIPIENTS HR_E(0xCC79)")
cpp_quote("#define IXP_E_SMTP_NO_SENDER HR_E(0xCC7A)")
cpp_quote("#define IXP_E_SMTP_NO_RECIPIENTS HR_E(0xCC7B)")
cpp_quote("#define IXP_E_SMTP_530_STARTTLS_REQUIRED HR_E(0xCC7C)")
cpp_quote("#define IXP_E_SMTP_NO_STARTTLS_SUPPORT HR_E(0xCC7D)")
cpp_quote("#define IXP_E_SMTP_NO_DSN_SUPPORT HR_E(0xCC7E)")
cpp_quote("#define IXP_E_SMTP_454_STARTTLS_FAILED HR_E(0xCC7F)")
const SHORT CCHMAX_DOMAIN = 256;
const SHORT CCHMAX_PHONE_NUMBER = 128;
const DWORD DEFAULT_IMAP_PORT = 143;
const DWORD DEFAULT_POP3_PORT = 110;
const DWORD DEFAULT_SMTP_PORT = 25;
const DWORD DEFAULT_NNTP_PORT = 119;
typedef enum tagINETADDRTYPE
{
ADDR_TO,
ADDR_FROM,
ADDR_DSN_NEVER = 16,
ADDR_DSN_SUCCESS = 32,
ADDR_DSN_FAILURE = 64,
ADDR_DSN_DELAY = 128
} INETADDRTYPE;
const DWORD ADDR_TOFROM_MASK = 0x1;
const DWORD ADDR_DSN_MASK = 0xf0;
typedef enum tagDSNRET
{
DSNRET_DEFAULT,
DSNRET_HDRS,
DSNRET_FULL,
} DSNRET;
typedef struct tagINETADDR
{
INETADDRTYPE addrtype;
CHAR szEmail[CCHMAX_EMAIL_ADDRESS];
} INETADDR, *LPINETADDR;
typedef struct tagINETADDRLIST
{
ULONG cAddress;
LPINETADDR prgAddress;
} INETADDRLIST, *LPINETADDRLIST;
typedef enum tagRASCONNTYPE
{
RAS_CONNECT_LAN,
RAS_CONNECT_MANUAL,
RAS_CONNECT_RAS
} RASCONNTYPE;
typedef enum tagHTTPMAILPROPTYPE
{
HTTPMAIL_PROP_INVALID,
HTTPMAIL_PROP_ADBAR,
HTTPMAIL_PROP_CONTACTS,
HTTPMAIL_PROP_INBOX,
HTTPMAIL_PROP_OUTBOX,
HTTPMAIL_PROP_SENDMSG,
HTTPMAIL_PROP_SENTITEMS,
HTTPMAIL_PROP_DELETEDITEMS,
HTTPMAIL_PROP_DRAFTS,
HTTPMAIL_PROP_MSGFOLDERROOT,
HTTPMAIL_PROP_SIG,
HTTPMAIL_PROP_LAST
} HTTPMAILPROPTYPE;
typedef enum tagHTTPMAILSPECIALFOLDER
{
HTTPMAIL_SF_NONE,
HTTPMAIL_SF_UNRECOGNIZED,
HTTPMAIL_SF_INBOX,
HTTPMAIL_SF_DELETEDITEMS,
HTTPMAIL_SF_DRAFTS,
HTTPMAIL_SF_OUTBOX,
HTTPMAIL_SF_SENTITEMS,
HTTPMAIL_SF_CONTACTS,
HTTPMAIL_SF_CALENDAR,
HTTPMAIL_SF_MSNPROMO,
HTTPMAIL_SF_LAST
} HTTPMAILSPECIALFOLDER;
typedef enum tagHTTPMAILCONTACTTYPE
{
HTTPMAIL_CT_CONTACT,
HTTPMAIL_CT_GROUP,
HTTPMAIL_CT_LAST
} HTTPMAILCONTACTTYPE;
const DWORD DAVNAMESPACE_UNKNOWN = 0xFFFFFFFF;
const DWORD DAVNAMESPACE_DAV = 0;
const DWORD DAVNAMESPACE_HOTMAIL = 1;
const DWORD DAVNAMESPACE_HTTPMAIL = 2;
const DWORD DAVNAMESPACE_MAIL = 3;
const DWORD DAVNAMESPACE_CONTACTS = 4;
cpp_quote("#define ISF_SMTP_USEIPFORHELO 0x01")
cpp_quote("#define ISF_ALWAYSPROMPTFORPASSWORD 0x02")
/* for SMTP - send EHLO and use STARTTLS if available: */
cpp_quote("#define ISF_SSLONSAMEPORT 0x04")
cpp_quote("#define ISF_QUERYDSNSUPPORT 0x08")
/* for SMTP - send EHLO and use AUTH if available: */
cpp_quote("#define ISF_QUERYAUTHSUPPORT 0x10")
typedef struct INETSERVER
{
CHAR szAccount[CCHMAX_ACCOUNT_NAME];
CHAR szUserName[CCHMAX_USERNAME];
CHAR szPassword[CCHMAX_PASSWORD];
CHAR szServerName[CCHMAX_SERVER_NAME];
CHAR szConnectoid[CCHMAX_CONNECTOID];
RASCONNTYPE rasconntype;
DWORD dwPort;
BOOL fSSL;
BOOL fTrySicily;
DWORD dwTimeout;
DWORD dwFlags;
} INETSERVER, *LPINETSERVER;
typedef enum tagIXPTYPE
{
IXP_NNTP,
IXP_SMTP,
IXP_POP3,
IXP_IMAP,
IXP_RAS,
IXP_HTTPMail
} IXPTYPE;
typedef enum tagIXPSTATUS
{
IXP_FINDINGHOST,
IXP_CONNECTING,
IXP_SECURING,
IXP_CONNECTED,
IXP_AUTHORIZING,
IXP_AUTHRETRY,
IXP_AUTHORIZED,
IXP_DISCONNECTING,
IXP_DISCONNECTED,
IXP_LAST
} IXPSTATUS;
const DWORD DEPTH_INFINITY = 0xFFFFFFFE;
typedef DWORD MEMBERINFOFLAGS;
const MEMBERINFOFLAGS HTTP_MEMBERINFO_COMMONPROPS = 0x0;
const MEMBERINFOFLAGS HTTP_MEMBERINFO_FOLDERPROPS = 0x1;
const MEMBERINFOFLAGS HTTP_MEMBERINFO_MESSAGEPROPS = 0x2;
const MEMBERINFOFLAGS HTTP_MEMBERINFO_ALLPROPS = HTTP_MEMBERINFO_FOLDERPROPS | HTTP_MEMBERINFO_MESSAGEPROPS;
typedef DWORD IMAP_MSGFLAGS;
const IMAP_MSGFLAGS IMAP_MSG_NOFLAGS = 0x00;
const IMAP_MSGFLAGS IMAP_MSG_ANSWERED = 0x01;
const IMAP_MSGFLAGS IMAP_MSG_FLAGGED = 0x02;
const IMAP_MSGFLAGS IMAP_MSG_DELETED = 0x04;
const IMAP_MSGFLAGS IMAP_MSG_SEEN = 0x08;
const IMAP_MSGFLAGS IMAP_MSG_DRAFT = 0x10;
const IMAP_MSGFLAGS IMAP_MSG_ALLFLAGS = 0x1f;
[
object,
uuid(CA30F3FF-C9AC-11D1-9A3A-00C04FA309D4),
local
]
interface ITransportCallbackService : IUnknown
{
HRESULT GetParentWindow(
[in] DWORD dwReserved,
[out] HWND *phwndParent);
HRESULT GetAccount(
[out] LPDWORD pdwServerType,
[out] IImnAccount **ppAccount);
}
[
object,
uuid(0DF2C7E1-3435-11D0-81D0-00C04FD85AB4),
local
]
interface ITransportCallback : IUnknown
{
typedef struct tagIXPRESULT
{
HRESULT hrResult;
LPSTR pszResponse;
UINT uiServerError;
HRESULT hrServerError;
DWORD dwSocketError;
LPSTR pszProblem;
} IXPRESULT, *LPIXPRESULT;
typedef enum tagCMDTYPE
{
CMD_SEND,
CMD_RESP
} CMDTYPE;
HRESULT OnTimeout(
[in,out] DWORD *pdwTimeout,
[in] IInternetTransport *pTransport);
HRESULT OnLogonPrompt(
[in,out] LPINETSERVER pInetServer,
[in] IInternetTransport *pTransport);
INT OnPrompt(
[in] HRESULT hrError,
[in] LPCSTR pszText,
[in] LPCSTR pszCaption,
[in] UINT uType,
[in] IInternetTransport *pTransport);
HRESULT OnStatus(
[in] IXPSTATUS ixpstatus,
[in] IInternetTransport *pTransport);
HRESULT OnError(
[in] IXPSTATUS ixpstatus,
[in] LPIXPRESULT pResult,
[in] IInternetTransport *pTransport);
HRESULT OnCommand(
[in] CMDTYPE cmdtype,
[in] LPSTR pszLine,
[in] HRESULT hrResponse,
[in] IInternetTransport *pTransport);
}
[
object,
uuid(1F636C01-364E-11D0-81D3-00C04FD85AB4),
local
]
interface IInternetTransport : IUnknown
{
const boolean iitAUTHENTICATE = TRUE;
const boolean iitDONT_AUTHENTICATe = FALSE;
const boolean iitENABLE_ONCOMMAND = TRUE;
const boolean iitDISABLE_ONCOMMAND = FALSE;
typedef enum tagIXPISSTATE
{
IXP_IS_CONNECTED,
IXP_IS_BUSY,
IXP_IS_READY,
IXP_IS_AUTHENTICATED
} IXPISSTATE;
HRESULT GetServerInfo(
[in,out] LPINETSERVER pInetServer);
IXPTYPE GetIXPType();
HRESULT IsState(
[in] IXPISSTATE isstate);
HRESULT InetServerFromAccount(
[in] IImnAccount *pAccount,
[in,out] LPINETSERVER pInetServer);
HRESULT Connect(
[in] LPINETSERVER pInetServer,
[in] boolean fAuthenticate,
[in] boolean fCommandLogging);
HRESULT HandsOffCallback();
HRESULT Disconnect();
HRESULT DropConnection();
HRESULT GetStatus(
[out] IXPSTATUS *pCurrentStatus);
}
[
object,
uuid(1F636C02-364E-11D0-81D3-00C04FD85AB4),
local
]
interface ISMTPCallback : ITransportCallback
{
typedef enum tagSMTPCOMMAND
{
SMTP_NONE,
SMTP_BANNER,
SMTP_CONNECTED,
SMTP_SEND_MESSAGE,
SMTP_AUTH,
SMTP_EHLO,
SMTP_HELO,
SMTP_MAIL,
SMTP_RCPT,
SMTP_RSET,
SMTP_QUIT,
SMTP_DATA,
SMTP_DOT,
SMTP_SEND_STREAM,
SMTP_CUSTOM
} SMTPCOMMAND;
typedef struct tagSMTPSTREAM
{
DWORD cbIncrement;
DWORD cbCurrent;
DWORD cbTotal;
} SMTPSTREAM, *LPSMTPSTREAM;
typedef struct tagSMTPRESPONSE
{
SMTPCOMMAND command;
BOOL fDone;
IXPRESULT rIxpResult;
ISMTPTransport *pTransport;
[switch_type(SMTPCOMMAND), switch_is(command)]
union
{
[case(SMTP_SEND_STREAM)] SMTPSTREAM rStreamInfo;
[default];
} DUMMYUNIONNAME;
} SMTPRESPONSE, *LPSMTPRESPONSE;
HRESULT OnResponse(
[in] LPSMTPRESPONSE pResponse);
}
[
object,
uuid(0DF2C7E2-3435-11D0-81D0-00C04FD85AB4),
local
]
interface ISMTPTransport : IInternetTransport
{
typedef struct tagSMTPMESSAGE
{
ULONG cbSize;
LPSTREAM pstmMsg;
INETADDRLIST rAddressList;
} SMTPMESSAGE, *LPSMTPMESSAGE;
HRESULT InitNew(
[in] LPSTR pszLogFilePath,
[in] ISMTPCallback *pCallback);
cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
cpp_quote("#undef SendMessage")
cpp_quote("#endif")
HRESULT SendMessage(
[in] LPSMTPMESSAGE pMessage);
HRESULT CommandMAIL(
[in] LPSTR pszEmailFrom);
HRESULT CommandRCPT(
[in] LPSTR pszEmailTo);
HRESULT CommandEHLO();
HRESULT CommandHELO();
HRESULT CommandAUTH(
[in] LPSTR pszAuthType);
HRESULT CommandQUIT();
HRESULT CommandRSET();
HRESULT CommandDATA();
HRESULT CommandDOT();
HRESULT SendDataStream(
[in] IStream *pStream,
[in] ULONG cbSize);
}
[
object,
uuid(0DF2C7EC-3435-11D0-81D0-00C04FD85AB4),
local
]
interface ISMTPTransport2 : ISMTPTransport
{
typedef struct tagSMTPMESSAGE2
{
SMTPMESSAGE smtpMsg;
LPSTR pszDSNENVID;
DSNRET dsnRet;
DWORD dwReserved;
DWORD dwReserved2;
} SMTPMESSAGE2, *LPSMTPMESSAGE2;
HRESULT SetWindow();
HRESULT ResetWindow();
HRESULT SendMessage2(
[in] LPSMTPMESSAGE2 pMessage);
HRESULT CommandRCPT2(
[in] LPSTR pszEmailTo,
[in] INETADDRTYPE atDSN);
}
/* FIXME: IDAVNamespaceArbiter, IPropPatchRequest, IPropFindRequest, IPropFindMultiResponse, IPropFindResponse, IHTTPMailCallback, IHTTPMailTransport */
[
object,
uuid(0DF2C7E3-3435-11D0-81D0-00C04FD85AB4),
local
]
interface IPOP3Callback : ITransportCallback
{
typedef enum tagPOP3COMMAND
{
POP3_NONE,
POP3_BANNER,
POP3_CONNECTED,
POP3_USER,
POP3_PASS,
POP3_AUTH,
POP3_UIDL,
POP3_STAT,
POP3_LIST,
POP3_DELE,
POP3_RETR,
POP3_TOP,
POP3_NOOP,
POP3_QUIT,
POP3_RSET,
POP3_CUSTOM
} POP3COMMAND;
typedef struct tagPOP3RETR
{
BOOL fHeader;
BOOL fBody;
DWORD dwPopId;
DWORD cbSoFar;
LPSTR pszLines;
ULONG cbLines;
} POP3RETR, *LPPOP3RETR;
typedef struct tagPOP3TOP
{
BOOL fHeader;
BOOL fBody;
DWORD dwPopId;
DWORD cPreviewLines;
DWORD cbSoFar;
LPSTR pszLines;
ULONG cbLines;
} POP3TOP, *LPPOP3TOP;
typedef struct tagPOP3LIST
{
DWORD dwPopId;
DWORD cbSize;
} POP3LIST, *LPPOP3LIST;
typedef struct tagPOP3UIDL
{
DWORD dwPopId;
LPSTR pszUidl;
} POP3UIDL, *LPPOP3UIDL;
typedef struct tagPOP3STAT
{
DWORD cMessages;
DWORD cbMessages;
} POP3STAT, *LPPOP3STAT;
typedef struct tagPOP3RESPONSE
{
POP3COMMAND command;
BOOL fDone;
IXPRESULT rIxpResult;
IPOP3Transport *pTransport;
BOOL fValidInfo;
[switch_type(POP3COMMAND), switch_is(command)]
union
{
[case(POP3_UIDL)] POP3UIDL rUidlInfo;
[case(POP3_STAT)] POP3STAT rStatInfo;
[case(POP3_LIST)] POP3LIST rListInfo;
[case(POP3_DELE)] DWORD dwPopId;
[case(POP3_RETR)] POP3RETR rRetrInfo;
[case(POP3_TOP)] POP3TOP rTopInfo;
[default];
} DUMMYUNIONNAME;
} POP3RESPONSE, *LPPOP3RESPONSE;
HRESULT OnResponse(
[in] LPPOP3RESPONSE pResponse);
}
[
object,
uuid(0DF2C7E4-3435-11D0-81D0-00C04FD85AB4),
local
]
interface IPOP3Transport : IInternetTransport
{
typedef enum tagPOP3CMDTYPE
{
POP3CMD_GET_POPID,
POP3CMD_GET_MARKED,
POP3CMD_GET_ALL
} POP3CMDTYPE;
typedef enum tagPOP3MARKTYPE
{
POP3_MARK_FOR_TOP = 0x01,
POP3_MARK_FOR_RETR = 0x02,
POP3_MARK_FOR_DELE = 0x04,
POP3_MARK_FOR_UIDL = 0x08,
POP3_MARK_FOR_LIST = 0x10
} POP3MARKTYPE;
HRESULT InitNew(
[in] LPSTR pszLogFilePath,
[in] IPOP3Callback *pCallback);
HRESULT MarkItem(
[in] POP3MARKTYPE marktype,
[in] DWORD dwPopId,
[in] boolean fMarked);
HRESULT CommandAUTH(
[in] LPSTR pszAuthType);
HRESULT CommandUSER(
[in] LPSTR pszUserName);
HRESULT CommandPASS(
[in] LPSTR pszPassword);
HRESULT CommandLIST(
[in] POP3CMDTYPE cmdtype,
[in] DWORD dwPopId);
HRESULT CommandTOP(
[in] POP3CMDTYPE cmdtype,
[in] DWORD dwPopId,
[in] DWORD cPreviewLines);
HRESULT CommandQUIT();
HRESULT CommandSTAT();
HRESULT CommandNOOP();
HRESULT CommandRSET();
HRESULT CommandUIDL(
[in] POP3CMDTYPE cmdtype,
[in] DWORD dwPopId);
HRESULT CommandDELE(
[in] POP3CMDTYPE cmdtype,
[in] DWORD dwPopId);
HRESULT CommandRETR(
[in] POP3CMDTYPE cmdtype,
[in] DWORD dwPopId);
}
/* FIXME: INNTPCallback, INNTPTransport */
/* FIXME: IRangeList */
/* FIXME: IIMAPCallback, IIMAPTransport */
#if 0
cpp_quote("HRESULT WINAPI CreateRASTransport(IRASTransport **ppTransport);")
cpp_quote("HRESULT WINAPI CreateNNTPTransport(INNTPTransport **ppTransport);")
cpp_quote("HRESULT WINAPI CreateIMAPTransport(IIMAPTransport **ppTransport);")
cpp_quote("HRESULT WINAPI CreateIMAPTransport2(IIMAPTransport2 **ppTransport);")
cpp_quote("HRESULT WINAPI CreateRangeList(IRangeList **ppRangeList);")
#endif
cpp_quote("HRESULT WINAPI CreateSMTPTransport(ISMTPTransport **ppTransport);")
cpp_quote("HRESULT WINAPI CreatePOP3Transport(IPOP3Transport **ppTransport);")