//
// Copyright (c) Microsoft Corporation. All rights reserved.

cpp_quote("/* Copyright (c) Microsoft Corporation. All rights reserved. */")

// rend.idl : IDL source for rend.dll
//

// This file will be processed by the MIDL tool to
// produce the type library (rend.tlb) and marshalling code.

import "oaidl.idl";
import "tapi3if.idl";

// Conference and user object Interfaces
const DISPID  IDISPDIROBJECT            = 0x00010000;
const DISPID  IDISPDIROBJCONFERENCE     = 0x00020000;
const DISPID  IDISPDIROBJUSER           = 0x00030000;

// Directory object interfaces
const DISPID  IDISPDIRECTORY            = 0x00010000;
const DISPID  IDISPILSCONFIG            = 0x00020000;


typedef enum DIRECTORY_TYPE
{
    DT_NTDS   = 1,
    DT_ILS    = 2

} DIRECTORY_TYPE;

typedef enum DIRECTORY_OBJECT_TYPE
{
    OT_CONFERENCE  = 1,
    OT_USER        = 2

} DIRECTORY_OBJECT_TYPE;

typedef enum RND_ADVERTISING_SCOPE
{
    RAS_LOCAL   = 1,
    RAS_SITE    = 2,
    RAS_REGION  = 3,
    RAS_WORLD   = 4

} RND_ADVERTISING_SCOPE;

[
    object,
    uuid(F1029E5D-CB5B-11D0-8D59-00C04FD91AC0),
    dual,
    helpstring("Interface for conference announcements."),
    pointer_default(unique)
]

interface ITDirectoryObjectConference : IDispatch
{
    [propget, id(IDISPDIROBJCONFERENCE | 1), helpstring("The protocol used in describing the conference.")]
    HRESULT Protocol(
        [out, retval] BSTR *ppProtocol
        );

    [propget, id(IDISPDIROBJCONFERENCE | 2), helpstring("The originator of the conference.")]
    HRESULT Originator(
        [out, retval] BSTR *ppOriginator
        );

    [propput, id(IDISPDIROBJCONFERENCE | 2), helpstring("The originator of the conference.")]
    HRESULT Originator(
        [in] BSTR pOriginator
        );

    [propget, id(IDISPDIROBJCONFERENCE | 3), helpstring("The scope of the conference.")]
    HRESULT AdvertisingScope(
        [out, retval] RND_ADVERTISING_SCOPE *pAdvertisingScope
        );

    [propput, id(IDISPDIROBJCONFERENCE | 3), helpstring("The scope of the conference.")]
    HRESULT AdvertisingScope(
        [in] RND_ADVERTISING_SCOPE AdvertisingScope
        );

    [propget, id(IDISPDIROBJCONFERENCE | 4), helpstring("The Url for the conference.")]
    HRESULT Url(
        [out, retval] BSTR *ppUrl
        );

    [propput, id(IDISPDIROBJCONFERENCE | 4), helpstring("The Url for the conference.")]
    HRESULT Url(
        [in] BSTR pUrl
        );

    [propget, id(IDISPDIROBJCONFERENCE | 5), helpstring("The description of the conference.")]
    HRESULT Description(
        [out, retval] BSTR *ppDescription
        );

    [propput, id(IDISPDIROBJCONFERENCE | 5), helpstring("The description of the conference.")]
    HRESULT Description(
        [in] BSTR pDescription
        );

    [propget, id(IDISPDIROBJCONFERENCE | 6), helpstring("If the conference is encrypted.")]
    HRESULT IsEncrypted(
        [out, retval] VARIANT_BOOL *pfEncrypted
        );

    [propput, id(IDISPDIROBJCONFERENCE | 6), helpstring("If the conference is encrypted.")]
    HRESULT IsEncrypted(
        [in] VARIANT_BOOL fEncrypted
        );

    [propget, id(IDISPDIROBJCONFERENCE | 7), helpstring("The start time of the conference.")]
    HRESULT StartTime(
        [out, retval] DATE *pDate
        );

    [propput, id(IDISPDIROBJCONFERENCE | 7), helpstring("The start time of the conference.")]
    HRESULT StartTime(
        [in] DATE   Date
        );

    [propget, id(IDISPDIROBJCONFERENCE | 8), helpstring("The stop time of the conference.")]
    HRESULT StopTime(
        [out, retval] DATE *pDate
        );

    [propput, id(IDISPDIROBJCONFERENCE | 8), helpstring("The stop time of the conference.")]
    HRESULT StopTime(
        [in] DATE   Date
        );
};


[
    object,
    uuid(34621D6F-6CFF-11d1-AFF7-00C04FC31FEE),
    dual,
    helpstring("Interface for user object."),
    pointer_default(unique)
]

interface ITDirectoryObjectUser : IDispatch
{
    [propget, id(IDISPDIROBJUSER | 1), helpstring("The primary IP phone attribute.")]
    HRESULT IPPhonePrimary(
        [out, retval] BSTR *ppName
        );

    [propput, id(IDISPDIROBJUSER | 1), helpstring("The primary IP phone attribute.")]
    HRESULT IPPhonePrimary(
        [in] BSTR pName
        );
};

[
    uuid(34621D70-6CFF-11d1-AFF7-00C04FC31FEE),
    helpstring("IEnumDialableAddresses interface"),
    hidden,
    restricted,
    pointer_default(unique)
]

interface IEnumDialableAddrs : IUnknown
{
    HRESULT Next(
        [in] ULONG celt,
        [out, size_is(celt)] BSTR * ppElements,
        [in,out,ptr] ULONG * pcFetched
        );

    HRESULT Reset( void );

    HRESULT Skip (
        [in] ULONG celt
        );

    HRESULT Clone (
        [out, retval] IEnumDialableAddrs ** ppEnum
        );
};

[
    object,
    uuid(34621D6E-6CFF-11d1-AFF7-00C04FC31FEE),
    dual,
    helpstring("Interface for an object in the directory."),
    pointer_default(unique)
]

interface ITDirectoryObject : IDispatch
{
    [propget, id(IDISPDIROBJECT | 1), helpstring("The type of this object.")]
    HRESULT ObjectType(
        [out, retval] DIRECTORY_OBJECT_TYPE *   pObjectType
        );

    [propget, id(IDISPDIROBJECT | 2), helpstring("The name of this object.")]
    HRESULT Name(
        [out, retval] BSTR *ppName
        );

    [propput, id(IDISPDIROBJECT | 2), helpstring("The name of this object.")]
    HRESULT Name(
        [in] BSTR pName
        );

    [propget, id(IDISPDIROBJECT | 3), helpstring("The addresses of the object that can be dialed.")]
    HRESULT DialableAddrs(
        [in]            long       dwAddressType,   //defined in tapi.h
        [out, retval]   VARIANT *   pVariant
        );

    [id(IDISPDIROBJECT | 4), hidden, restricted, helpstring("method EnumerateDialableAddrs")]
    HRESULT EnumerateDialableAddrs(
        [in]    DWORD                   dwAddressType, //defined in tapi.h
        [out]   IEnumDialableAddrs **   ppEnumDialableAddrs
        );

    [propget, id(IDISPDIROBJECT | 5), helpstring("The security descriptor.")]
    HRESULT SecurityDescriptor(
        [out, retval] IDispatch ** ppSecDes
        );

    [propput, id(IDISPDIROBJECT | 5), helpstring("The security descriptor.")]
    HRESULT SecurityDescriptor(
        [in] IDispatch * pSecDes
        );
};

[
    object,
    uuid(06C9B64A-306D-11D1-9774-00C04FD91AC0),
    helpstring("IEnumDirectoryObject interface"),
    hidden,
    restricted,
    pointer_default(unique)
]
interface IEnumDirectoryObject : IUnknown
{
    HRESULT Next(
        [in]  ULONG celt,
        [out, size_is(celt)] ITDirectoryObject **pVal,
        [in, out, ptr] ULONG * pcFetched
        );

    HRESULT Reset( void );

    HRESULT Skip (
        [in] ULONG celt
        );

    HRESULT Clone (
        [out, retval] IEnumDirectoryObject ** ppEnum
        );
};

[
    object,
    public,
    uuid(34621D72-6CFF-11d1-AFF7-00C04FC31FEE),
    dual,
    helpstring("Interface to configure ILS server.")
]
interface ITILSConfig : IDispatch
{
    [propget, id(IDISPILSCONFIG | 1), helpstring("The port the ILS server is listening on.")]
    HRESULT Port(
        [out, retval] long *pPort
        );

    [propput, id(IDISPILSCONFIG | 1), helpstring("The port the ILS server is listening on.")]
    HRESULT Port(
        [in] long Port
        );
};

[
    object,
    public,
    uuid(34621D6C-6CFF-11d1-AFF7-00C04FC31FEE),
    dual,
    helpstring("Interface to a generic directory service.")
]
interface ITDirectory : IDispatch
{
    // find the type of the directory, NTDS, ILS, etc.
    [propget, id(IDISPDIRECTORY | 1), helpstring("The type of the directory.")]
    HRESULT DirectoryType(
        [out, retval] DIRECTORY_TYPE *  pDirectoryType
        );

    [propget, id(IDISPDIRECTORY | 2), helpstring("The name of the directory.")]
    HRESULT DisplayName(
        [out, retval] BSTR *  pName
        );
    
    [propget, id(IDISPDIRECTORY | 3), helpstring("If the object on the server needs refresh.")]
    HRESULT IsDynamic(
        [out, retval] VARIANT_BOOL *pfDynamic
        );

    [propget, id(IDISPDIRECTORY | 4), helpstring("The default Time To Live value(in seconds) for object created. Only apply to dynamic servers.")]
    HRESULT DefaultObjectTTL(
        [out, retval] long *pTTL
        );

    [propput, id(IDISPDIRECTORY | 4), helpstring("The default Time To Live value(in seconds) for object created. Only apply to dynamic servers. Minimum 300 seconds.")]
    HRESULT DefaultObjectTTL(
        [in] long TTL                   
        );

    [id(IDISPDIRECTORY | 5), helpstring("Enable the auto refresh for object created afterwards. Only apply to dynamic servers.")]
    HRESULT EnableAutoRefresh(
        [in] VARIANT_BOOL fEnable
        );

    [id(IDISPDIRECTORY | 6), helpstring("Connect to the server.")]
    HRESULT Connect(
        [in] VARIANT_BOOL fSecure
        );

    [id(IDISPDIRECTORY | 7), helpstring("Bind to the server.")]
    HRESULT Bind(
        [in] BSTR           pDomainName,   // Can be NULL.
        [in] BSTR           pUserName,     // Can be NULL.
        [in] BSTR           pPassword,     // Can be NULL.
        [in] long           lFlags
        );

    [id(IDISPDIRECTORY | 8), helpstring("Add an object to the server.")]
    HRESULT AddDirectoryObject(
        [in] ITDirectoryObject *pDirectoryObject
        );

    [id(IDISPDIRECTORY | 9), helpstring("Modify an object on the server.")]
    HRESULT ModifyDirectoryObject(
        [in] ITDirectoryObject *pDirectoryObject
        );

    [id(IDISPDIRECTORY | 10), helpstring("Refresh the TTL for an object on the server. Only apply to dynamic servers.")]
    HRESULT RefreshDirectoryObject(
        [in] ITDirectoryObject *pDirectoryObject
        );

    [id(IDISPDIRECTORY | 11), helpstring("Delete an object from the server.")]
    HRESULT DeleteDirectoryObject(
        [in] ITDirectoryObject *pDirectoryObject
        );

    [propget, id(IDISPDIRECTORY | 12), helpstring("All the objects on the server with specified type and name.")]
    HRESULT DirectoryObjects(
        [in]            DIRECTORY_OBJECT_TYPE   DirectoryObjectType,
        [in]            BSTR                    pName,
        [out, retval]   VARIANT *               pVariant
        );

    [id(IDISPDIRECTORY | 13), hidden, restricted, helpstring("method EnumerateDirectoryObjects")]
    HRESULT EnumerateDirectoryObjects(
        [in]    DIRECTORY_OBJECT_TYPE   DirectoryObjectType,
        [in]    BSTR                    pName,
	    [out]   IEnumDirectoryObject ** ppEnumObject
	    );
};

[
    uuid(34621D6D-6CFF-11d1-AFF7-00C04FC31FEE),
    helpstring("IEnumDirectory interface"),
    hidden,
    restricted,
    pointer_default(unique)
]

interface IEnumDirectory : IUnknown
{
    HRESULT Next(
        [in] ULONG celt,
        [out, size_is(celt), length_is(*pcFetched)] ITDirectory ** ppElements,
        [in,out,ptr] ULONG * pcFetched
        );

    HRESULT Reset( void );

    HRESULT Skip (
        [in] ULONG celt
        );

    HRESULT Clone (
        [out, retval] IEnumDirectory ** ppEnum
        );
};

[
    object,
    public,
    uuid(34621D6B-6CFF-11d1-AFF7-00C04FC31FEE),
    dual,
    helpstring("Interface to access directories and obejcts.")
]
interface ITRendezvous : IDispatch
{
    [propget, id(1), helpstring("The default directories configured by system administrator.")]
    HRESULT DefaultDirectories(
        [out, retval] VARIANT * pVariant
        );

    [id(2), hidden, restricted, helpstring("method Enumerate directories")]
    HRESULT EnumerateDefaultDirectories(
	    [out]   IEnumDirectory ** ppEnumDirectory
	    );

    [id(3), helpstring("Create a directory of given type and name.")]
    HRESULT CreateDirectory(
        [in]            DIRECTORY_TYPE  DirectoryType,
        [in]            BSTR            pName,
	    [out, retval]   ITDirectory **  ppDir
	    );

    [id(4), helpstring("Create a new directory object.")]
    HRESULT CreateDirectoryObject(
        [in]            DIRECTORY_OBJECT_TYPE   DirectoryObjectType,
        [in]            BSTR                    pName,
	    [out, retval]   ITDirectoryObject **    ppDirectoryObject
	    );
};


cpp_quote("")
cpp_quote("")
cpp_quote("/***************************************************************/")
cpp_quote("/* Rend constants -- defined here for C apps                   */")
cpp_quote("/* The subsequent definitions that MIDL generates from the     */")
cpp_quote("/* module declaration are not used. The module declaration is  */")
cpp_quote("/* retained, however, so that the constants show up in the     */")
cpp_quote("/* type library.                                               */")
cpp_quote("/***************************************************************/")
cpp_quote("")
cpp_quote("#define RENDBIND_AUTHENTICATE       0x00000001")
cpp_quote("#define RENDBIND_DEFAULTDOMAINNAME  0x00000002")
cpp_quote("#define RENDBIND_DEFAULTUSERNAME    0x00000004")
cpp_quote("#define RENDBIND_DEFAULTPASSWORD    0x00000008")
cpp_quote("/* this is just the previous three |'ed together for convenience. */")
cpp_quote("#define RENDBIND_DEFAULTCREDENTIALS 0x0000000e")
cpp_quote("")
cpp_quote("#define __RendConstants_MODULE_DEFINED__")
cpp_quote("")
cpp_quote("/***************************************************************/")
cpp_quote("/* end of rend constants section                               */")
cpp_quote("/***************************************************************/")
cpp_quote("")
cpp_quote("")

[
    uuid(F1029E4D-CB5B-11D0-8D59-00C04FD91AC0),
    version(1.0),
    helpstring("Microsoft Rendezvous control 1.0 Type Library")
]
library RENDLib
{
    importlib("stdole2.tlb");
    
    interface ITRendezvous;
    interface ITDirectoryObjectConference;
    interface ITDirectoryObjectUser;
    interface ITDirectoryObject;
    interface ITILSConfig;
    interface ITDirectory;

    [
        uuid(F1029E5B-CB5B-11D0-8D59-00C04FD91AC0),
        helpstring("The Rendezvous Control Class")
    ]
    coclass Rendezvous
    {
        [default] interface ITRendezvous;
    };

    [
        uuid(A2382C3C-A108-11d2-B117-006008B0E5D2),
        dllname("rend.dll"),
        helpstring("TAPI 3.0 Rendezvous Control Constants")
    ]
    module RendConstants
    {
        const long RENDBIND_AUTHENTICATE       = 0x00000001;
        const long RENDBIND_DEFAULTDOMAINNAME  = 0x00000002;
        const long RENDBIND_DEFAULTUSERNAME    = 0x00000004;
        const long RENDBIND_DEFAULTPASSWORD    = 0x00000008;
        // this is just the previous three |'ed together for convenience.
        const long RENDBIND_DEFAULTCREDENTIALS = 0x0000000e;
    };

};

// eof
