/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the w64 mingw-runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */
#ifndef _INC_RDPENCOMAPI
#define _INC_RDPENCOMAPI

#if (_WIN32_WINNT >= 0x0600)

#ifdef __cplusplus
extern "C" {
#endif

typedef enum _ATTENDEE_DISCONNECT_REASON {
  ATTENDEE_DISCONNECT_REASON_MIN   = 0,
  ATTENDEE_DISCONNECT_REASON_APP   = 0,
  ATTENDEE_DISCONNECT_REASON_ERR   = 1,
  ATTENDEE_DISCONNECT_REASON_CLI   = 2,
  ATTENDEE_DISCONNECT_REASON_MAX   = 2
} ATTENDEE_DISCONNECT_REASON;

typedef enum _CHANNEL_ACCESS_ENUM {
  CHANNEL_ACCESS_ENUM_NONE          = 0,
  CHANNEL_ACCESS_ENUM_SENDRECEIVE   = 1
} CHANNEL_ACCESS_ENUM;

typedef enum _CHANNEL_FLAGS {
  CHANNEL_FLAGS_LEGACY         = 0x01,
  CHANNEL_FLAGS_UNCOMPRESSED   = 0x02
} CHANNEL_FLAGS;

typedef enum _CHANNEL_PRIORITY {
  CHANNEL_PRIORITY_LO    = 0,
  CHANNEL_PRIORITY_MED   = 1,
  CHANNEL_PRIORITY_HI    = 2
} CHANNEL_PRIORITY;

typedef enum _CTRL_LEVEL {
  CTRL_LEVEL_MIN           = 0,
  CTRL_LEVEL_INVALID       = 0,
  CTRL_LEVEL_NONE          = 1,
  CTRL_LEVEL_VIEW          = 2,
  CTRL_LEVEL_INTERACTIVE   = 3,
  CTRL_LEVEL_MAX           = 3
} CTRL_LEVEL;

typedef enum _RDPENCOMAPI_ATTENDEE_FLAGS {
  ATTENDEE_FLAGS_LOCAL   = 1
} RDPENCOMAPI_ATTENDEE_FLAGS;

typedef enum _RDPENCOMAPI_CONSTANTS {
  CONST_MAX_CHANNEL_MESSAGE_SIZE          = 1024,
  CONST_MAX_CHANNEL_NAME_LEN              = 8,
  CONST_MAX_LEGACY_CHANNEL_MESSAGE_SIZE   = 409600,
  CONST_ATTENDEE_ID_EVERYONE              = -1,
  CONST_ATTENDEE_ID_HOST                  = 0,
  CONST_CONN_INTERVAL                     = 50
} RDPENCOMAPI_CONSTANTS;

typedef enum _RDPSRAPI_APP_FLAGS {
  APP_FLAG_PRIVILEGED   = 1
} RDPSRAPI_APP_FLAGS;

typedef enum _RDPSRAPI_WND_FLAGS {
  WND_FLAG_PRIVILEGED   = 1
} RDPSRAPI_WND_FLAGS;

#ifdef __cplusplus
}
#endif

#undef  INTERFACE
#define INTERFACE IRDPSRAPITcpConnectionInfo
#ifdef __GNUC__
#warning COM interfaces layout in this header has not been verified.
#warning COM interfaces with incorrect layout may not work at all.
__MINGW_BROKEN_INTERFACE(INTERFACE)
#endif
DECLARE_INTERFACE_(IRDPSRAPITcpConnectionInfo,IDispatch)
{
    BEGIN_INTERFACE

    /* IUnknown methods */
    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
    STDMETHOD_(ULONG, Release)(THIS) PURE;

    /* IDispatch methods */
    STDMETHOD_(HRESULT,GetTypeInfoCount)(THIS_ unsigned int FAR*  pctinfo) PURE;
    STDMETHOD_(HRESULT,GetTypeInfo)(THIS_ unsigned int  iTInfo,LCID  lcid,ITypeInfo FAR* FAR*  ppTInfo) PURE;
    STDMETHOD_(HRESULT,GetIDsOfNames)(THIS_ REFIID  riid,OLECHAR FAR* FAR*  rgszNames,unsigned int  cNames,LCID   lcid,DISPID FAR*  rgDispId) PURE;
    STDMETHOD_(HRESULT,Invoke)(THIS_ DISPID  dispIdMember,REFIID  riid,LCID  lcid,WORD  wFlags,DISPPARAMS FAR*  pDispParams,VARIANT FAR*  pVarResult,EXCEPINFO FAR*  pExcepInfo,unsigned int FAR*  puArgErr) PURE;

    /* IRDPSRAPITcpConnectionInfo methods */
    STDMETHOD_(HRESULT,get_Protocol)(THIS_ long *plProtocol) PURE;
    STDMETHOD_(HRESULT,get_LocalPort)(THIS_ long *plPort) PURE;
    STDMETHOD_(HRESULT,get_LocalIP)(THIS_ BSTR *pbstrLocalIP) PURE;
    STDMETHOD_(HRESULT,get_PeerPort)(THIS_ long *plPort) PURE;
    STDMETHOD_(HRESULT,get_PeerIP)(THIS_ BSTR *pbstrIP) PURE;

    END_INTERFACE
};
#ifdef COBJMACROS
#define IRDPSRAPITcpConnectionInfo_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
#define IRDPSRAPITcpConnectionInfo_AddRef(This) (This)->pVtbl->AddRef(This)
#define IRDPSRAPITcpConnectionInfo_Release(This) (This)->pVtbl->Release(This)
#define IRDPSRAPITcpConnectionInfo_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IRDPSRAPITcpConnectionInfo_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IRDPSRAPITcpConnectionInfo_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IRDPSRAPITcpConnectionInfo_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IRDPSRAPITcpConnectionInfo_get_Protocol(This,plProtocol) (This)->lpVtbl->get_Protocol(This,plProtocol)
#define IRDPSRAPITcpConnectionInfo_get_LocalPort(This,plPort) (This)->lpVtbl->get_LocalPort(This,plPort)
#define IRDPSRAPITcpConnectionInfo_get_LocalIP(This,pbstrLocalIP) (This)->lpVtbl->get_LocalIP(This,pbstrLocalIP)
#define IRDPSRAPITcpConnectionInfo_get_PeerPort(This,plPort) (This)->lpVtbl->get_PeerPort(This,plPort)
#define IRDPSRAPITcpConnectionInfo_get_PeerIP(This,pbstrIP) (This)->lpVtbl->get_PeerIP(This,pbstrIP)
#endif /*COBJMACROS*/

#undef  INTERFACE
#define INTERFACE IRDPSRAPIAttendee
#ifdef __GNUC__
#warning COM interfaces layout in this header has not been verified.
#warning COM interfaces with incorrect layout may not work at all.
__MINGW_BROKEN_INTERFACE(INTERFACE)
#endif
DECLARE_INTERFACE_(IRDPSRAPIAttendee,IDispatch)
{
    BEGIN_INTERFACE

    /* IUnknown methods */
    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
    STDMETHOD_(ULONG, Release)(THIS) PURE;

    /* IDispatch methods */
    STDMETHOD_(HRESULT,GetTypeInfoCount)(THIS_ unsigned int FAR*  pctinfo) PURE;
    STDMETHOD_(HRESULT,GetTypeInfo)(THIS_ unsigned int  iTInfo,LCID  lcid,ITypeInfo FAR* FAR*  ppTInfo) PURE;
    STDMETHOD_(HRESULT,GetIDsOfNames)(THIS_ REFIID  riid,OLECHAR FAR* FAR*  rgszNames,unsigned int  cNames,LCID   lcid,DISPID FAR*  rgDispId) PURE;
    STDMETHOD_(HRESULT,Invoke)(THIS_ DISPID  dispIdMember,REFIID  riid,LCID  lcid,WORD  wFlags,DISPPARAMS FAR*  pDispParams,VARIANT FAR*  pVarResult,EXCEPINFO FAR*  pExcepInfo,unsigned int FAR*  puArgErr) PURE;

    /* IRDPSRAPIAttendee methods */
    STDMETHOD_(HRESULT,get_Id)(THIS_ long *pId) PURE;
    STDMETHOD_(HRESULT,get_RemoteName)(THIS_ BSTR *pVal) PURE;
    STDMETHOD_(HRESULT,get_ControlLevel)(THIS_ CTRL_LEVEL *pVal) PURE;
    STDMETHOD_(HRESULT,put_ControlLevel)(THIS_ CTRL_LEVEL pNewVal) PURE;
    STDMETHOD_(HRESULT,get_Invitation)(THIS_ IRDPSRAPIInvitation **ppVal) PURE;
    STDMETHOD_(HRESULT,TerminateConnection)(THIS) PURE;
    STDMETHOD_(HRESULT,get_Flags)(THIS_ long *plFlags) PURE;
    STDMETHOD_(HRESULT,get_ConnectivityInfo)(THIS_ IUnknown **ppVal) PURE;

    END_INTERFACE
};
#ifdef COBJMACROS
#define IRDPSRAPIAttendee_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
#define IRDPSRAPIAttendee_AddRef(This) (This)->pVtbl->AddRef(This)
#define IRDPSRAPIAttendee_Release(This) (This)->pVtbl->Release(This)
#define IRDPSRAPIAttendee_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IRDPSRAPIAttendee_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IRDPSRAPIAttendee_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IRDPSRAPIAttendee_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IRDPSRAPIAttendee_get_Id(This,pId) (This)->lpVtbl->get_Id(This,pId)
#define IRDPSRAPIAttendee_get_RemoteName(This,pVal) (This)->lpVtbl->get_RemoteName(This,pVal)
#define IRDPSRAPIAttendee_get_ControlLevel(This,pVal) (This)->lpVtbl->get_ControlLevel(This,pVal)
#define IRDPSRAPIAttendee_put_ControlLevel(This,pNewVal) (This)->lpVtbl->put_ControlLevel(This,pNewVal)
#define IRDPSRAPIAttendee_get_Invitation(This,ppVal) (This)->lpVtbl->get_Invitation(This,ppVal)
#define IRDPSRAPIAttendee_TerminateConnection() (This)->lpVtbl->TerminateConnection(This)
#define IRDPSRAPIAttendee_get_Flags(This,plFlags) (This)->lpVtbl->get_Flags(This,plFlags)
#define IRDPSRAPIAttendee_get_ConnectivityInfo(This,ppVal) (This)->lpVtbl->get_ConnectivityInfo(This,ppVal)
#endif /*COBJMACROS*/

#endif /*(_WIN32_WINNT >= 0x0600)*/

#endif /*_INC_RDPENCOMAPI */

