/*++

Copyright (c) 1995  Microsoft Corporation

Module Name:

    smtpsvc.idl

Abstract:

    Contains the Smtp RPC interface specification for the SMTP server.
    This includes API from the following catagories:



    Also contains the RPC specific data structures for these API.

Author:

        Johnson Apacible (johnsona)     13-Oct-1995
        Based on srvsvc.idl code from DanL and JohnsonA

Environment:

    User Mode - Win32 - MIDL

Revision History:

                Keith Lau (keithlau) 7/18/96   Created new RPCs
                Keith Lau (keithlau) 8/28/96   Created new SDK RPCs

--*/


//
// Interface Attributes
//

[
    uuid(8cfb5d70-31a4-11cf-a7d8-00805f48a135),
    version(3.0),
#ifdef __midl
        ms_union,
#endif // __midl
    pointer_default(unique)
]


interface smtp
{

import   "import.idl";
#include <lmcons.h>

//
// BUGBUG - take this definition out when midl understands LPWSTR etc
//

typedef [handle] LPWSTR  SMTP_HANDLE;
typedef [handle] LPWSTR  SMTP_IMPERSONATE_HANDLE;

//
// Structures - Smtp
//

typedef [switch_type(unsigned long)] union _STAT_INFO {
    [case(0)]
        PSMTP_STATISTICS_BLOCK_ARRAY StatInfo0;
    [default]
        ;
} STAT_INFO, *PSTAT_INFO, *LPSTAT_INFO;


NET_API_STATUS
NET_API_FUNCTION
SmtprGetAdminInformation(
    [in, string, unique]        SMTP_HANDLE             pszServer,
    [out]                       LPSMTP_CONFIG_INFO *    ppConfig,
    [in]                        DWORD                   dwInstance
    );

NET_API_STATUS
NET_API_FUNCTION
SmtprSetAdminInformation(
    [in, string, unique]        SMTP_HANDLE             pszServer,
    [in]                        LPSMTP_CONFIG_INFO      pConfig,
    [in]                        DWORD                   dwInstance
    );

NET_API_STATUS
SmtprQueryStatistics(
    [in,string,unique]          SMTP_HANDLE             ServerName,
    [in]                        DWORD                   Level,
    [out, switch_is(Level)]     LPSTAT_INFO             InfoStruct
    );

NET_API_STATUS
SmtprClearStatistics(
    [in,string,unique]          SMTP_HANDLE             ServerName,
    [in]                        DWORD                   dwInstance
    );

NET_API_STATUS
SmtprGetConnectedUserList(
    [in,string,unique]          SMTP_HANDLE             wszServerName,
    [out]                       LPSMTP_CONN_USER_LIST   *ppConnUserList,
    [in]                        DWORD                   dwInstance
    );

NET_API_STATUS
SmtprDisconnectUser(
    [in,string,unique]          SMTP_HANDLE             wszServerName,
    [in]                        DWORD                   dwUserId,
    [in]                        DWORD                   dwInstance
    );

NET_API_STATUS
SmtprCreateUser(
        [in,string,unique]      SMTP_HANDLE             wszServerName,
        [in,string,unique]      LPWSTR                  wszEmail,
        [in,string,unique]      LPWSTR                  wszForwardEmail,
        [in]                    DWORD                   dwLocal,
        [in]                    DWORD                   dwMailboxSize,
        [in]                    DWORD                   dwMailboxMessageSize,
        [in,string,unique]      LPWSTR                  wszVRoot,
        [in]                    DWORD                   dwInstance
        );

NET_API_STATUS
SmtprDeleteUser(
        [in,string,unique]      SMTP_HANDLE             wszServerName,
        [in,string,unique]      LPWSTR                  wszEmail,
        [in]                    DWORD                   dwInstance
        );

NET_API_STATUS
SmtprGetUserProps(
        [in,string,unique]      SMTP_HANDLE             wszServerName,
        [in,string,unique]      LPWSTR                  wszEmail,
        [out]                   LPSMTP_USER_PROPS       *ppUserProps,
        [in]                    DWORD                   dwInstance
        );

NET_API_STATUS
SmtprSetUserProps(
        [in,string,unique]      SMTP_HANDLE             wszServerName,
        [in,string,unique]      LPWSTR                  wszEmail,
        [in,unique]             LPSMTP_USER_PROPS       pUserProps,
        [in]                    DWORD                   dwInstance
        );

NET_API_STATUS
SmtprCreateDistList(
        [in,string,unique]      SMTP_HANDLE             wszServerName,
        [in,string,unique]      LPWSTR                  wszEmail,
        [in]                    DWORD                   dwType,
        [in]                    DWORD                   dwInstance
        );

NET_API_STATUS
SmtprDeleteDistList(
        [in,string,unique]      SMTP_HANDLE            wszServerName,
        [in,string,unique]      LPWSTR                 wszEmail,
        [in]                    DWORD                  dwInstance
        );

NET_API_STATUS
SmtprCreateDistListMember(
        [in,string,unique]      SMTP_HANDLE            wszServerName,
        [in,string,unique]      LPWSTR                 wszEmail,
        [in,string,unique]      LPWSTR                 wszEmailMember,
        [in]                    DWORD                  dwInstance

        );

NET_API_STATUS
SmtprDeleteDistListMember(
        [in,string,unique]      SMTP_HANDLE            wszServerName,
        [in,string,unique]      LPWSTR                 wszEmail,
        [in,string,unique]      LPWSTR                 wszEmailMember,
        [in]                    DWORD                  dwInstance
        );

NET_API_STATUS
SmtprGetNameList(
        [in,string,unique]      SMTP_HANDLE            wszServerName,
        [in,string,unique]      LPWSTR                 wszEmail,
        [in]                    DWORD                  dwType,
        [in]                    DWORD                  dwRowsRequested,
        [in]                    BOOL                   fForward,
        [out]                   LPSMTP_NAME_LIST       *ppNameList,
        [in]                    DWORD                  dwInstance

    );

NET_API_STATUS
SmtprGetNameListFromList(
        [in,string,unique]      SMTP_HANDLE            wszServerName,
        [in,string,unique]      LPWSTR                 wszEmailList,
        [in,string,unique]      LPWSTR                 wszEmail,
        [in]                    DWORD                  dwType,
        [in]                    DWORD                  dwRowsRequested,
        [in]                    BOOL                   fForward,
        [out]                   LPSMTP_NAME_LIST       *ppNameList,
        [in]                    DWORD                  dwInstance
    );

NET_API_STATUS
SmtprGetVRootSize(
        [in,string,unique]      SMTP_HANDLE            wszServerName,
        [in,string,unique]      LPWSTR                 wszVRoot,
        [out]                   LPDWORD                pdwBytes,
        [in]                    DWORD                  dwInstance
    );

NET_API_STATUS
SmtprBackupRoutingTable(
        [in,string,unique]      SMTP_HANDLE            wszServerName,
        [in,string,unique]      LPWSTR                 wszPath,
        [in]                    DWORD                  dwInstance
    );

#ifdef USE_OLD_SDK

// ===================================================
// SMTP SDK RPCs
//

NET_API_STATUS
NET_API_FUNCTION
SmtprGetUserProfileInformation(
        [in, string, unique]    SMTP_HANDLE     wszServer,
        [in, string, unique]    LPWSTR          wszEmail,
        [in, string, unique]    LPWSTR          wszExtensionDllName,
        [in, string, unique]    LPWSTR          wszKey,
        [out, string]           LPWSTR          *ppwszValue,
        [in, out]               LPDWORD         lpdwSize,
        [in]                    DWORD           dwInstance
    );

NET_API_STATUS
NET_API_FUNCTION
SmtprSetUserProfileInformation(
    [in, string, unique]        SMTP_HANDLE     wszServer,
        [in, string, unique]    LPWSTR          wszEmail,
        [in, string, unique]    LPWSTR          wszExtensionDllName,
        [in, string, unique]    LPWSTR          wszKey,
        [in, string, unique]    LPWSTR          wszValue,
        [in]                    DWORD           dwInstance

    );

#endif

}