Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

503 lines
22 KiB

//-----------------------------------------------------------------------------
//
//
// File: aqueue.idl
//
// Description: IDL source for aqueue.dll. Contains interface descriptions
// for:
// IAdvQueue
// Exposes SubmitMessage via server event as well
// as HandleFailedMessage.
// IAdvQueueConfig
// Allows SMTP service to configure AQ
// IConnectionManager
// Interface to SMTP for outbound connections
// IAdvQueueDomainType
// Interface passed to the default categorizer that
// allows it to check if a domain is local or not.
//
// Author: mikeswa
//
// History:
// 7/28/98 - MikeSwa Modified - added IAdvQueueDomainType and
// HandleFailedMessage
// 6/7/99 - MikeSwa Removed queue admin interface
// Copyright (C) 1997 Microsoft Corporation
//
//-----------------------------------------------------------------------------
import "oaidl.idl";
import "ocidl.idl";
import "mailmsg.idl";
import "smtpevent.idl";
import "perfcat.h";
// Include aqdll.h to define the dll and function names and prototypes
cpp_quote("#include \"aqdll.h\" ")
//---[ eMessageStatus ]--------------------------------------------------------
//
//
// Description: enum used to describe Message status on
// ISMTPConnection::AckMessage
//
//-----------------------------------------------------------------------------
typedef [v1_enum] enum
{
MESSAGE_STATUS_ALL_DELIVERED = 0x00000001, //everything succeed
MESSAGE_STATUS_RETRY = 0x00000002, //need to retry message
MESSAGE_STATUS_CHECK_RECIPS = 0x00000004, //send message through dsn code
MESSAGE_STATUS_NDR_ALL = 0x00000008, //delivery failed -- NDR all recips
MESSAGE_STATUS_DSN_NOT_SUPPORTED = 0x00000010, //remote system does not support DSN's
MESSAGE_STATUS_EXTENDED_STATUS_CODES = 0x00000020, //Extended status codes returned
MESSAGE_STATUS_RESERVED = 0xFF000000, //reserved for internal use
} eMessageStatus ;
cpp_quote("#define MESSAGE_STATUS_RETRY_ALL 0x00000002") //*** OBSOLETE ***
//---[ eConnectionStatus ]-----------------------------------------------------
//
//
// Description: enum used to describe connection status on
// ISMTPConnection::AckConnection
//
//-----------------------------------------------------------------------------
typedef [v1_enum] enum
{
CONNECTION_STATUS_OK = 0x00000000,
CONNECTION_STATUS_FAILED = 0x00000001, //Initial Connection failed
CONNECTION_STATUS_DROPPED = 0x00000002, //Initial Connection succeeded, but was later dropped
CONNECTION_STATUS_FAILED_NDR_UNDELIVERED = 0x00000004, //NDR undelivered recipients
CONNECTION_STATUS_FAILED_LOOPBACK = 0x00000010, //Connection configured as loop
} eConnectionStatus ;
//---[ eDomainInfoFlags ]------------------------------------------------------
//
// Description: Flags used to describe boolean per domain properties
// See smtpevent.idl for the definition of the domain info flags.
//
//-----------------------------------------------------------------------------
//---[ DomainInfo ]------------------------------------------------------------
//
//
// Description: Struct passed back by ISMTPConnection::GetDomainInfo
// (string size does not include '\0'). Also used to set per-domain
// properties.
//
// String values that are returned in proc via GetDomainInfo will be
// valid while the connection exists.
//
//-----------------------------------------------------------------------------
typedef struct _DomainInfo
{
DWORD cbVersion; //version / size of info struct
DWORD dwDomainInfoFlags; //OR'd eDomainInfoFlags
DWORD cbDomainNameLength;
LPSTR szDomainName; //Domain Name this info references
DWORD cbETRNDomainNameLength;
LPSTR szETRNDomainName; //Domain Name to send with ETRN
DWORD cbSmartHostDomainNameLength;
LPSTR szSmartHostDomainName; //Domain Name to connect as
DWORD cbDropDirectoryLength;
LPSTR szDropDirectory; //Directory to drop to
DWORD cbAuthTypeLength;
LPSTR szAuthType; //Arbitrary auth type string
DWORD cbUserNameLength;
LPSTR szUserName; //User name to authenticate with
DWORD cbPasswordLength;
LPSTR szPassword; //Password to authenticate with
DWORD cEtrnDelayTime; //Delay between making connection and sending ETRN
DWORD cbBlob;
DWORD *pvBlob; //Blob associated with domain (used in relay restrictions)
} DomainInfo ;
//---[ eAQConfigInfoFlags ]----------------------------------------------------
//
//
// Description: Flags describing which AQConfigInfo parameters to use (are
// updated)
//
//-----------------------------------------------------------------------------
typedef [v1_enum] enum
{
AQ_CONFIG_INFO_MAX_CON = 0x00000001, //Use cMaxConnections
AQ_CONFIG_INFO_MAX_LINK = 0x00000002, //Use cMaxLinkConnections
AQ_CONFIG_INFO_MIN_MSG = 0x00000004, //Use cMinMessagesPerConnection
AQ_CONFIG_INFO_CON_WAIT = 0x00000008, //Use dwConnectionWaitMilliseconds
AQ_CONFIG_INFO_CON_RETRY = 0x00000010, //Use dwConnectionWaitMilliseconds
AQ_CONFIG_INFO_MSGCAT_DOMAIN = 0x00000020, //Use szMsgCatDomain
AQ_CONFIG_INFO_MSGCAT_USER = 0x00000040, //Use szMsgCatUser
AQ_CONFIG_INFO_MSGCAT_PASSWORD = 0x00000080, //Use szMsgCatPassword
AQ_CONFIG_INFO_MSGCAT_BINDTYPE = 0x00000100, //Use szMsgCatBindType
AQ_CONFIG_INFO_MSGCAT_SCHEMATYPE = 0x00000200, //Use szMsgCatSchemaType
AQ_CONFIG_INFO_MSGCAT_HOST = 0x00000400, //Use szMsgCatHost
AQ_CONFIG_INFO_MSGCAT_FLAGS = 0x00000800, //Use dwMsgCatFlags
AQ_CONFIG_INFO_MSGCAT_NAMING_CONTEXT = 0x00001000, //Use szMsgCatNamingContext
AQ_CONFIG_INFO_MSGCAT_TYPE = 0x00002000, //Use szMsgCatType
AQ_CONFIG_INFO_MSGCAT_PORT = 0x00004000, //Use dwMsgCatPort
AQ_CONFIG_INFO_EXPIRE_DELAY = 0x00008000, //Use dwDelayExpireMinutes
AQ_CONFIG_INFO_EXPIRE_NDR = 0x00010000, //Use dwNDRExpireMinutes
AQ_CONFIG_INFO_LOCAL_EXPIRE_DELAY = 0x00020000, //Use dwLocalDelayExpireMinutes
AQ_CONFIG_INFO_LOCAL_EXPIRE_NDR = 0x00040000, //Use dwLocalNDRExpireMinutes
AQ_CONFIG_INFO_DEFAULT_DOMAIN = 0x00080000, //Use szDefaultLocalDomain
AQ_CONFIG_INFO_BADMAIL_DIR = 0x00100000, //Use szBadMailDir
AQ_CONFIG_INFO_USE_DSN_OPTIONS = 0x00200000, //Use dwDSNOptions
AQ_CONFIG_INFO_USE_DSN_LANGUAGE = 0x00400000, //Use dwDSNLanguageID
AQ_CONFIG_INFO_MSGCAT_ENABLE = 0x00800000, //Use dwMsgCatEnable
AQ_CONFIG_INFO_SEND_DSN_TO = 0x01000000, //Use send NDR to address
AQ_CONFIG_INFO_MSGCAT_DEFAULT = 0x02000000, //Use defaults if params not set
AQ_CONFIG_INFO_SERVER_FQDN = 0x04000000, //Use server FQDN
AQ_CONFIG_INFO_ALL = 0x07FFFFFF, //Use all Fields
} eAQConfigInfoFlags ;
//---[ eDSNOptions ]-----------------------------------------------------------
//
//
// Description:
// Options flags for DSN options passed into AQueue.
//
//-----------------------------------------------------------------------------
typedef [v1_enum] enum
{
DSN_OPTIONS_DEFAULT = 0x00000000,
DSN_OPTIONS_DEFAULT_RET_HEADERS = 0x00000001,
DSN_OPTIONS_DEFAULT_RET_FULL = 0x00000002,
DSN_OPTIONS_IGNORE_MSG_RET = 0x00000004,
DSN_OPTIONS_SEND_DELAY_DEFAULT = 0x00000008,
DSN_OPTIONS_SEND_DELAY_UPON_REQUEST = 0x00000010,
DSN_OPTIONS_SEND_DELAY_NEVER = 0x00000020,
} eDSNOptions;
//---[ AQConfigInfo ]----------------------------------------------------------
//
//
// Description: Struct containing all dynamically set-able global AQ
// properties
//
//-----------------------------------------------------------------------------
typedef struct _AQConfigInfo
{
DWORD cbVersion; //version / size of into struct
DWORD dwAQConfigInfoFlags; //Flags describing which info to update
DWORD cMaxConnections; //Total maximum Connections
DWORD cMaxLinkConnections; //Total number of connections per link
DWORD cMinMessagesPerConnection; //Minimum # of message before creating
//*additional* connection
DWORD dwConnectionWaitMilliseconds; //# of milliseconds to in
//GetNextConnection, before timing out and
//retrying link objects
DWORD dwConnectionRetryMilliseconds; //# of milliseconds wwait before
//retrying failed connections
DWORD dwRetryThreshold; //# of connections failures before we start
DWORD dwFirstRetrySeconds; //Interval to hold when retrying for first time
DWORD dwSecondRetrySeconds; //Interval to hold when retrying for second time
DWORD dwThirdRetrySeconds; //Interval to hold when retrying for third time
DWORD dwFourthRetrySeconds; //Interval to hold when retrying more than three times
//credentials & config into used by MsgCat to athenticate against DS
LPSTR szMsgCatDomain;
LPSTR szMsgCatUser;
LPSTR szMsgCatPassword;
LPSTR szMsgCatBindType;
LPSTR szMsgCatSchemaType;
LPSTR szMsgCatHost;
DWORD dwMsgCatPort;
DWORD dwMsgCatFlags;
DWORD dwMsgCatEnable;
LPSTR szMsgCatNamingContext;
LPSTR szMsgCatType;
//Expiry information
DWORD dwDelayExpireMinutes;
DWORD dwNDRExpireMinutes;
DWORD dwLocalDelayExpireMinutes;
DWORD dwLocalNDRExpireMinutes;
//Default local domain information
LPSTR szDefaultLocalDomain;
//Badmail handling
LPSTR szBadMailDir;
//DSN Configuration
DWORD dwDSNOptions;
DWORD dwDSNLanguageID;
LPSTR szSendCopyOfNDRToAddress;
LPSTR szServerFQDN;
} AQConfigInfo;
//---[ MessageAck ]------------------------------------------------------------
//
//
// Description: Struct passed back with message acks.
//
//
//-----------------------------------------------------------------------------
typedef struct _MessageAck
{
IMailMsgProperties *pIMailMsgProperties; //IMailMsgProperties to Ack
DWORD *pvMsgContext; //Context generated on GetNextMessage
DWORD dwMsgStatus; //eMsgStatus flags
DWORD dwStatusCode; //The DWORD version of the status code
DWORD cbExtendedStatus; //size of extended status string
LPSTR szExtendedStatus; //extended status -- valid only when
//MESSAGE_STATUS_EXTENDED_STATUS_CODES is set
} MessageAck ;
//---[ eMessageFailureReasons ]------------------------------------------------
//
//
// Description:
// Enum describing the possible SMTP message failure reasons.
//
//-----------------------------------------------------------------------------
typedef [v1_enum] enum
{
MESSAGE_FAILURE_GENERAL = 0x00000001,
MESSAGE_FAILURE_HOP_COUNT_EXCEEDED = 0x00000002, //Hop count on message exceeds max
MESSAGE_FAILURE_BAD_PICKUP_DIR_FILE = 0x00000003, //Unable to process pickup dir file
} eMessageFailureReasons;
//---[ ISMTPConnection ]-------------------------------------------------------
//
//
// Description: Interface used by SMTP to represent a single outbound
// connection.
//
//
//-----------------------------------------------------------------------------
[
object,
local,
uuid(838258A5-4EEB-11D1-B2CD-00C04FC32984),
helpstring("ISMTPConnection Interface"),
pointer_default(unique)
]
interface ISMTPConnection : IUnknown
{
[helpstring("method AckConnection")] HRESULT AckConnection(
[in] DWORD dwConnectionStatus);
[helpstring("method GetDomainInfo")] HRESULT GetDomainInfo(
[in, out] DomainInfo *pDomainInfo);
[helpstring("method GetNextMessage")] HRESULT GetNextMessage(
[out] IMailMsgProperties **ppIMailMsgProperties,
[out] DWORD **ppvMsgContext,
[in, out] DWORD *pcIndexes,
[out, size_is(*pcIndexes)] DWORD *prgdwRecipIndex[]);
[helpstring("method AckMessage")] HRESULT AckMessage(
[in] MessageAck *pMsgAck);
[helpstring("method SetDiagnosticInfo")] HRESULT SetDiagnosticInfo(
[in] HRESULT hrDiagnosticError,
[in, string] LPCSTR szDiagnosticVerb,
[in, string] LPCSTR szDiagnosticResponse);
};
//---[ IConnectionManager ]----------------------------------------------------
//
//
// Description: Interface used by SMTP to Get outbound connections and
// to handle TURN, ETRN, and ATRN requests
//
//
//-----------------------------------------------------------------------------
[
object,
local,
uuid(B198B19B-C346-11d1-A67D-00C04FA3490A),
helpstring("IConnectionManager Interface"),
pointer_default(unique)
]
interface IConnectionManager : IUnknown
{
//method that waits until an outbound connection can be created
[helpstring("method GetNextConnection")] HRESULT GetNextConnection(
[out, retval] ISMTPConnection **ppISMTPConnection);
//Used to get a connection for TURN and ATRN. The domain must be
//configured as TURN or ATRN.
[helpstring("method GetNamedConnection")] HRESULT GetNamedConnection(
[in] DWORD cbSMTPDomain,
[in, size_is(cbSMTPDomain + 1)] CHAR szSMTPDomain[],
[out] ISMTPConnection **ppISMTPConnection);
//Used to release threads waiting in GetNextConnection for shutdown
[helpstring("method ReleaseWaitingThreads")] HRESULT ReleaseWaitingThreads();
//Used to request that a connection be created in GetNextConnection
//for the given domain. The domain must be configured as an ETRN
//domain.
[helpstring("method ETRNDomain")] HRESULT ETRNDomain(
[in] DWORD cbSMTPDomain,
[in, size_is(cbSMTPDomain + 1)] CHAR szSMTPDomain[],
[out] DWORD *pcMessages);
};
//---[ IConnectionPropertyManagement ]-----------------------------------------
//
//
// Description: Interface used by SMTP to manage properties that come from
// and need to be promoted to queuing.
//
//-----------------------------------------------------------------------------
[
object,
local,
uuid(C6E71C06-69EB-49bb-8C30-174AF798B0EE),
helpstring("IConnectionManager Interface"),
pointer_default(unique)
]
interface IConnectionPropertyManagement : IUnknown
{
//method that copies queue properties to a connection session object
[helpstring("method CopyQueuePropertiesToSession")]
HRESULT CopyQueuePropertiesToSession(
[in] IUnknown *pISession);
//method that copies session properties to queuing
[helpstring("method CopySessionPropertiesToQueue")]
HRESULT CopySessionPropertiesToQueue(
[in] IUnknown *pISession);
};
//---[ IAdvQueue ]-------------------------------------------------------------
//
//
// Description: Public interface that exposes servier-wide SubmitMessage
// (eventually through a server event). For MM1, both SMTP an the MAPI
// driver will use this to queueu messages for delivery,
//
//
//-----------------------------------------------------------------------------
[
object,
uuid(838258A9-4EEB-11D1-B2CD-00C04FC32984),
helpstring("IAdvQueue Interface"),
pointer_default(unique)
]
interface IAdvQueue : IUnknown
{
[helpstring("method SubmitMessage")] HRESULT SubmitMessage(
[in] IMailMsgProperties *pIMailMsgProperties);
[helpstring("method HandleFailedMessage")] HRESULT HandleFailedMessage(
[in] IMailMsgProperties *pIMailMsgProperties,
[in] BOOL fUseIMailMsgProperties,
[in] LPSTR szFileName,
[in] DWORD dwFailureDescription,
[in] HRESULT hrFailureCode);
};
//---[ AQPerfCounters ]------------------------------------------------------------
//
//
// Description: Struct containing A/Q perf counters
//
//
//-----------------------------------------------------------------------------
typedef struct _AQPerfCounters
{
DWORD cbVersion; //version / size of struct
DWORD cMsgsDeliveredLocal;
DWORD cCurrentMsgsPendingCat;
DWORD cCurrentMsgsPendingRemoteDelivery;
DWORD cCurrentMsgsPendingLocalDelivery;
DWORD cCurrentMsgsPendingRemoteRetry;
DWORD cCurrentMsgsPendingLocalRetry;
DWORD cCurrentQueueMsgInstances;
DWORD cTotalMsgRemoteSendRetries;
DWORD cTotalMsgLocalRetries;
DWORD cNDRsGenerated;
DWORD cDelayedDSNsGenerated;
DWORD cDeliveredDSNsGenerated;
DWORD cRelayedDSNsGenerated;
DWORD cExpandedDSNsGenerated;
DWORD cCurrentRemoteDestQueues;
DWORD cCurrentRemoteNextHopLinks;
DWORD cCurrentRemoteNextHopLinksEnabled;
DWORD cCurrentRemoteNextHopLinksPendingRetry;
DWORD cCurrentRemoteNextHopLinksPendingScheduling;
DWORD cCurrentRemoteNextHopLinksPendingTURNETRN;
DWORD cCurrentRemoteNextHopLinksFrozenByAdmin;
DWORD cTotalMsgsTURNETRN;
DWORD cTotalMsgsBadmailNoRecipients;
DWORD cTotalMsgsBadmailHopCountExceeded;
DWORD cTotalMsgsBadmailFailureGeneral;
DWORD cTotalMsgsBadmailBadPickupFile;
DWORD cTotalMsgsBadmailEvent;
DWORD cTotalMsgsBadmailNdrOfDsn;
DWORD cCurrentMsgsPendingRouting;
DWORD cCurrentMsgsPendingUnreachableLink;
DWORD cTotalMsgsSubmitted;
DWORD cTotalDSNFailures;
DWORD cCurrentMsgsInLocalDelivery;
} AQPerfCounters ;
//---[ IAdvQueueConfig ]-------------------------------------------------------
//
//
// Description: Configuration interface... used by SMTP to set global
// and per-domain configuration info. GetDomainInfo will match the
// closest configured wildcard domain if no exact match is found. For
// example, dino.exchange.microsoft.com will match *.microsoft.com if
// dino.exchange.microsoft.com and *.exchange.microsoft,com have no
// specific config info.
//
//
//-----------------------------------------------------------------------------
[
object,
local,
uuid(EABA472E-BE94-11d1-A678-00C04FA3490A),
helpstring("IAdvQueueConfig Interface"),
pointer_default(unique)
]
interface IAdvQueueConfig : IUnknown
{
//set the global config info for this server instance
[helpstring("method SetConfigInfo")] HRESULT SetConfigInfo(
[in] AQConfigInfo *pAQConfigInfo);
//set the domain configuration info for a specified domain
[helpstring("method SetDomainInfo")] HRESULT SetDomainInfo(
[in] DomainInfo *pDomainInfo);
//get the domain config info... will handle wildcard matching
[helpstring("method GetDomainInfo")] HRESULT GetDomainInfo(
[in] DWORD cbDomainNameLength,
[in, size_is(cbDomainNameLength+1)] CHAR szDomainName[],
[in, out] DomainInfo *pDomainInfo,
[out] DWORD **ppvDomainContext);
//Releases references memory allocated in GetDomainInfo
[helpstring("method ReleaseDomainInfo")] HRESULT ReleaseDomainInfo(
[in] DWORD *pvDomainContext);
//get A/Q perf counters
[helpstring("method GetPerfCounters")] HRESULT GetPerfCounters(
[out] AQPerfCounters *pAQPerfCounters,
[out] PCATPERFBLOCK pCatPerfCounters);
[helpstring("method ResetPerfCounters")] HRESULT ResetPerfCounters();
//Used to start/finish an update
[helpstring("method StartConfigUpdate")] HRESULT StartConfigUpdate();
[helpstring("method FinishConfigUpdate")] HRESULT FinishConfigUpdate();
};
//---[ IAdvQueueDomainType ]---------------------------------------------------
//
//
// Description:
// Interface passed to the default categorizer that allows it to check if
// a domain is local or not.
// The methods are defined in ICategorizerDomainInfo/smtpevent.idl.
//
//-----------------------------------------------------------------------------
[
object,
uuid(47EA42AD-2667-11d2-A68B-00C04FA3490A),
helpstring("IAdvQueueDomainType Interface"),
]
interface IAdvQueueDomainType : ICategorizerDomainInfo
{
}