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

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

///////////////////////////////////////////////////////////////////////////
// confpriv.idl : IDL source for IPconf msp private interfaces
/////////////////////////////////////////////////////////////////////////////

#ifndef __IPCONF_PRIVATE_IDL__
#define __IPCONF_PRIVATE_IDL__

import "ipmsp.idl";

typedef enum MULTICAST_LOOPBACK_MODE
{
    MM_NO_LOOPBACK,
    MM_FULL_LOOPBACK,
    MM_SELECTIVE_LOOPBACK

} MULTICAST_LOOPBACK_MODE;

/////////////////////////////////////////////////////////////////////////////
// Interface definitions
/////////////////////////////////////////////////////////////////////////////

[
    uuid(0d7ca54a-d252-4fcb-9104-f6ddd310b3f9),
    helpstring("IDummy interface"),
    pointer_default(unique),
]
interface IDummy : IUnknown
{
}

[
    uuid(39cbf055-f77a-11d2-a824-00c04f8ef6e3),
    helpstring("ITLocalParticipant interface"),
    pointer_default(unique),
    dual
]
interface ITLocalParticipant : IDispatch
{
    [propget, id(1), helpstring("property LocalParticipantTypedInfo")]
    HRESULT LocalParticipantTypedInfo(
        [in] PARTICIPANT_TYPED_INFO InfoType,
        [out, retval] BSTR * ppInfo
        );

    [propput, id(1), helpstring("property LocalParticipantTypedInfo")]
    HRESULT LocalParticipantTypedInfo(
        [in] PARTICIPANT_TYPED_INFO InfoType,
        [in] BSTR pInfo
        );
}

[
    uuid(0a91b56c-5a35-11d2-95a0-00a0244d2298),
    helpstring("IEnumParticipant Interface"),
    hidden,
    pointer_default(unique)
]
interface IEnumParticipant : IUnknown
{

    HRESULT Next(
            [in] ULONG celt,
            [out] ITParticipant ** ppElements,
            [in,out,ptr] ULONG * pceltFetched
            );

    HRESULT Reset( void );

    HRESULT Skip (
            [in] ULONG celt
            );

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


[
    uuid(d2ee6684-5a34-11d2-95a0-00a0244d2298),
    helpstring("ITParticipantControl Interface"),
    pointer_default(unique),
    dual
]
interface ITParticipantControl : IDispatch
{
    [id(1), hidden]
    HRESULT EnumerateParticipants(
            [out, retval] IEnumParticipant ** ppEnumParticipants
            );

    [propget, id(2), helpstring("an ITCollection of participants")]
    HRESULT Participants(
            [out, retval] VARIANT * pVariant
            );
}


[
    uuid(2c679108-5a35-11d2-95a0-00a0244d2298),
    helpstring("ITParticipantSubStreamControl Interface"),
    pointer_default(unique),
    dual
]
interface ITParticipantSubStreamControl : IDispatch
{
    [propget, id(1), helpstring("the substream that renders a participant")]
    HRESULT SubStreamFromParticipant(
            [in] ITParticipant * pParticipant,
            [out, retval] ITSubStream ** ppITSubStream
            );

    [propget, id(2), helpstring("the participant rendered on a sub stream")]
    HRESULT ParticipantFromSubStream(
            [in] ITSubStream * pITSubStream,
            [out, retval] ITParticipant ** ppParticipant 
            );

    [id(3), helpstring("set participant on a sub stream")]
    HRESULT SwitchTerminalToSubStream(
            [in] ITTerminal * pITTerminal,
            [in] ITSubStream * pITSubStream
            );
}


[
    uuid(8bb35070-2dad-11d3-a580-00c04f8ef6e3),
    helpstring("ITParticipantEvent Interface"),
    pointer_default(unique),
    dual
]
interface ITParticipantEvent : IDispatch
{
    [propget, id(2), helpstring("property Event")]
    HRESULT Event(
			[out, retval] PARTICIPANT_EVENT * pParticipantEvent
			);
    
    [propget, id(3), helpstring("property participant")]
    HRESULT Participant(
            [out, retval] ITParticipant** ppParticipant
            );
    
    [propget, id(4), helpstring("property SubStream")]
    HRESULT SubStream(
            [out, retval] ITSubStream** ppSubStream
            );
}

[
    uuid(410fa507-4dc6-415a-9014-633875d5406e),
    helpstring("IMulticastControl Interface"),
    pointer_default(unique),
    dual
]
interface IMulticastControl : IDispatch
{
    [propget, id(1), helpstring("property Loopback mode")]
    HRESULT LoopbackMode(
			[out, retval] MULTICAST_LOOPBACK_MODE * pMode
			);

    [propput, id(1), helpstring("property Loopback mode")]
    HRESULT LoopbackMode(
			[in] MULTICAST_LOOPBACK_MODE mode
			);
}

#endif // __IPCONF_PRIVATE_IDL__