/*++

Copyright (c) 1999-2000  Microsoft Corporation

Module Name:

    RDCHOST.IDL

Abstract:

    Remote Desktopping Client-Side IDL for Core Remote Desktopping Interfaces
    and Classes

Author:

    Tad Brockway 02/00

Revision History:

--*/
import "oaidl.idl";
import "ocidl.idl";
import "rdschan.idl";
import "rderror.idl";
#include "olectl.h"


    /**
    **  IDataChannelIO
    **
    **  Non-Public Data Channel IO Interface
    **/
    [
        object,
        uuid(43A09182-0472-436E-9883-2D95C347C5F1),
    
        helpstring("IDataChannelIO Interface"),
        pointer_default(unique)
    ]
    interface IDataChannelIO : IUnknown
    {
        [helpstring("method SendData")] HRESULT SendData([in]BSTR data);
        [propput, helpstring("property ChannelMgr")] HRESULT ChannelMgr(
                        [in] ISAFRemoteDesktopChannelMgr *newVal
                        );
    };

    /**
    **  ISAFRemoteDesktopClient Interface
    **/
    cpp_quote("")
    cpp_quote("#define DISPID_RDSCLIENT_CHANNELMANAGER                      1")
    cpp_quote("#define DISPID_RDSCLIENT_CONNECTPARMS                        2")
    cpp_quote("#define DISPID_RDSCLIENT_CONNECTTOSERVER                     3")
    cpp_quote("#define DISPID_RDSCLIENT_CONNECTREMOTEDESKTOP                4")
    cpp_quote("#define DISPID_RDSCLIENT_DISCONNECTREMOTEDESKTOP             5")
    cpp_quote("#define DISPID_RDSCLIENT_ISREMOTEDESKTOPCONNECTED            6")
    cpp_quote("#define DISPID_RDSCLIENT_ISSERVERCONNECTED                   7")
    cpp_quote("#define DISPID_RDSCLIENT_DISCONNECTFROMSERVER                8")
    cpp_quote("#define DISPID_RDSCLIENT_ONCONNECTED                         9")
    cpp_quote("#define DISPID_RDSCLIENT_ONDISCONNECTED                      10")
    cpp_quote("#define DISPID_RDSCLIENT_ONCONNECTREMOTEDESKTOPCOMPLETE      11")
    cpp_quote("#define DISPID_RDSCLIENT_EXTENDEDERRORINFO                   12")
    cpp_quote("#define DISPID_RDSCLIENT_ENABLESMARTSIZING                   13")
	cpp_quote("#define DISPID_RDSCLIENT_CONNECTEDSERVER						14")
	cpp_quote("#define DISPID_RDSCLIENT_CONNECTEDPORT						15")

    cpp_quote("#define DISPID_RDSCLIENT_CREATELISTENENDPOINT                16")
    cpp_quote("#define DISPID_RDSCLIENT_STARTLISTEN                         17")
    cpp_quote("#define DISPID_RDSCLIENT_ACCEPTCONNECTION                    18")
    cpp_quote("#define DISPID_RDSCLIENT_STOPLISTEN                          19")
    cpp_quote("#define DISPID_RDSCLIENT_ONLISTENCONNECT                     20")
    cpp_quote("#define DISPID_RDSCLIENT_COLORDEPTH                          21")
    cpp_quote("#define DISPID_RDSCLIENT_ONBEGINCONNECT                      22")


    cpp_quote("")

    #define DISPID_RDSCLIENT_CHANNELMANAGER                     1
    #define DISPID_RDSCLIENT_CONNECTPARMS                       2
    #define DISPID_RDSCLIENT_CONNECTTOSERVER                    3
    #define DISPID_RDSCLIENT_CONNECTREMOTEDESKTOP               4
    #define DISPID_RDSCLIENT_DISCONNECTREMOTEDESKTOP            5
    #define DISPID_RDSCLIENT_ISREMOTEDESKTOPCONNECTED           6
    #define DISPID_RDSCLIENT_ISSERVERCONNECTED                  7
    #define DISPID_RDSCLIENT_DISCONNECTFROMSERVER               8
    #define DISPID_RDSCLIENT_ONCONNECTED                        9
    #define DISPID_RDSCLIENT_ONDISCONNECTED                     10  
    #define DISPID_RDSCLIENT_ONCONNECTREMOTEDESKTOPCOMPLETE     11
    #define DISPID_RDSCLIENT_EXTENDEDERRORINFO                  12
    #define DISPID_RDSCLIENT_ENABLESMARTSIZING                  13
	#define DISPID_RDSCLIENT_CONNECTEDSERVER					14
	#define DISPID_RDSCLIENT_CONNECTEDPORT						15
    #define DISPID_RDSCLIENT_CREATELISTENENDPOINT               16
    #define DISPID_RDSCLIENT_STARTLISTEN                        17
    #define DISPID_RDSCLIENT_ACCEPTCONNECTION                   18
    #define DISPID_RDSCLIENT_STOPLISTEN                         19
    #define DISPID_RDSCLIENT_ONLISTENCONNECT                    20
    #define DISPID_RDSCLIENT_COLORDEPTH                         21
    #define DISPID_RDSCLIENT_ONBEGINCONNECT                     22


    [
        object,
        uuid(8AA5F108-2918-435C-88AA-DE0AFEE51440),
        dual,
        helpstring("ISAFRemoteDesktopClient Interface"),
        pointer_default(unique)
    ]
    interface ISAFRemoteDesktopClient : IDispatch
    {
        [propget, id(DISPID_RDSCLIENT_CHANNELMANAGER), helpstring("ChannelManager")] 
            HRESULT ChannelManager([out, retval]ISAFRemoteDesktopChannelMgr **mgr);

        [propput, id(DISPID_RDSCLIENT_CONNECTPARMS), helpstring("ConnectParms")] 
            HRESULT ConnectParms([in]BSTR parms);
        [propget, id(DISPID_RDSCLIENT_CONNECTPARMS), helpstring("ConnectParms")] 
            HRESULT ConnectParms([out, retval]BSTR *parms);

        [id(DISPID_RDSCLIENT_CONNECTTOSERVER), helpstring("method ConnectToServer")] 
            HRESULT ConnectToServer([in] BSTR expertBlob);

        [id(DISPID_RDSCLIENT_CONNECTREMOTEDESKTOP), helpstring("method ConnectRemoteDesktop")] 
            HRESULT ConnectRemoteDesktop();

        [id(DISPID_RDSCLIENT_DISCONNECTREMOTEDESKTOP), helpstring("method DisconnectRemoteDesktop")] 
            HRESULT DisconnectRemoteDesktop();

        [propget, id(DISPID_RDSCLIENT_ISREMOTEDESKTOPCONNECTED), helpstring("property IsRemoteDesktopConnected")] 
            HRESULT IsRemoteDesktopConnected([out, retval] BOOL *pVal);

        [propget, id(DISPID_RDSCLIENT_ISSERVERCONNECTED), helpstring("property IsServerConnected")] 
            HRESULT IsServerConnected([out, retval] BOOL *pVal);

        [id(DISPID_RDSCLIENT_DISCONNECTFROMSERVER), helpstring("method DisconnectFromServer")] 
            HRESULT DisconnectFromServer();

        [propput, id(DISPID_RDSCLIENT_ONCONNECTED), helpstring("OnConnected")] 
            HRESULT OnConnected([in] IDispatch *iDisp);

        [propput, id(DISPID_RDSCLIENT_ONDISCONNECTED), helpstring("OnDisconnected")] 
            HRESULT OnDisconnected([in] IDispatch *iDisp);

        [propput, id(DISPID_RDSCLIENT_ONCONNECTREMOTEDESKTOPCOMPLETE), helpstring("OnConnectRemoteDesktopComplete")] 
            HRESULT OnConnectRemoteDesktopComplete([in] IDispatch *iDisp);

        [propget, id(DISPID_RDSCLIENT_EXTENDEDERRORINFO), helpstring("ExtendedErrorInfo")] 
            HRESULT ExtendedErrorInfo([out, retval]LONG *error);

        [propput, id(DISPID_RDSCLIENT_ENABLESMARTSIZING), helpstring("EnableSmartSizing")] 
            HRESULT EnableSmartSizing([in] BOOL val);

        [propget, id(DISPID_RDSCLIENT_ENABLESMARTSIZING), helpstring("EnableSmartSizing")] 
            HRESULT EnableSmartSizing([out, retval]BOOL *val);

        [propget, id(DISPID_RDSCLIENT_CONNECTEDSERVER), helpstring("ConnectedServer")] 
            HRESULT ConnectedServer([out, retval]BSTR *val);

        [propget, id(DISPID_RDSCLIENT_CONNECTEDPORT), helpstring("ConnectedPort")] 
            HRESULT ConnectedPort([out, retval]LONG *val);

        // Create a listening endpoint and return connect parm
        [id(DISPID_RDSCLIENT_CREATELISTENENDPOINT), helpstring("CreateListenEndpoint")]
            HRESULT CreateListenEndpoint([in] LONG port, [out, retval] BSTR* pConnectParm);

        // Wait for incoming connection ISAFRemoteDesktopServerHost
        [id(DISPID_RDSCLIENT_STARTLISTEN), helpstring("StartListen")]
            HRESULT StartListen([in] LONG timeout);

        [id(DISPID_RDSCLIENT_ACCEPTCONNECTION), helpstring("AcceptListenConnection")]
            HRESULT AcceptListenConnection([in]BSTR expertBlob);

        // no event is fired.
        [id(DISPID_RDSCLIENT_STOPLISTEN), helpstring("StopListen")]
            HRESULT StopListen();

        [propput, id(DISPID_RDSCLIENT_ONLISTENCONNECT), helpstring("OnListenConnect")] 
            HRESULT OnListenConnect([in] IDispatch *iDisp);
		
        //set and get the colordepths
        [propput, id(DISPID_RDSCLIENT_COLORDEPTH), helpstring("ColorDepth")] 
            HRESULT ColorDepth([in] LONG val);

        [propget, id(DISPID_RDSCLIENT_COLORDEPTH), helpstring("ColorDepth")] 
            HRESULT ColorDepth([out, retval] LONG* val);

        [propput, id(DISPID_RDSCLIENT_ONBEGINCONNECT), helpstring("OnBeginConnect")] 
            HRESULT OnBeginConnect([in] IDispatch *iDisp);
    };

    [
        object,
        uuid(69DE5BF3-5EB9-4158-81DA-6FD662BBDDDD),
        dual,
        helpstring("ISAFRemoteDesktopClientHost Interface"),
        pointer_default(unique)
    ]
    interface ISAFRemoteDesktopClientHost : IDispatch
    {
        [id(1), helpstring("method GetRemoteDesktopClient")] 
            HRESULT GetRemoteDesktopClient([out, retval] ISAFRemoteDesktopClient **client);
    };

    [
        object,
        uuid(5C7A32EF-1C77-4F35-8FBA-729DD2DE7222),
        dual,
        helpstring("ISAFRemoteDesktopTestExtension Interface"),
        pointer_default(unique)
    ]
    interface ISAFRemoteDesktopTestExtension : IDispatch
    {
        [propput, id(1), helpstring("property TestExtDllName")] HRESULT TestExtDllName([in] BSTR newVal);
        [propput, id(2), helpstring("property TestExtParams")] HRESULT TestExtParams([in] BSTR newVal);
    };

/**
**  RDSClientHost Type Lib
**/
cpp_quote("")
cpp_quote("#define DISPID_RDSCLIENTEVENTS_CONNECTED						2")
cpp_quote("#define DISPID_RDSCLIENTEVENTS_DISCONNECTED					3")
cpp_quote("#define DISPID_RDSCLIENTEVENTS_REMOTECONTROLREQUESTCOMPLETE	4")
cpp_quote("#define DISPID_DATACHANNELEVEVENTS_DATAREADY					1")
cpp_quote("#define DISPID_RDSCLIENTEVENTS_LISTENCONNECT                 5")
cpp_quote("#define DISPID_RDSCLIENTEVENTS_BEGINCONNECT                  6")
cpp_quote("")
#define DISPID_RDSCLIENTEVENTS_CONNECTED                    2
#define DISPID_RDSCLIENTEVENTS_DISCONNECTED                 3
#define DISPID_RDSCLIENTEVENTS_REMOTECONTROLREQUESTCOMPLETE 4
#define DISPID_DATACHANNELEVEVENTS_DATAREADY                1
#define DISPID_RDSCLIENTEVENTS_LISTENCONNECT                5
#define DISPID_RDSCLIENTEVENTS_BEGINCONNECT                 6


cpp_quote("")
cpp_quote("#define DISPID_RDSCHANNELEVENTS_CHANNELDATAREADY     1")
cpp_quote("")
#define DISPID_RDSCHANNELEVENTS_CHANNELDATAREADY    1
[
    uuid(97917068-BB0B-4DDA-8067-B1A00C890F44),
    version(1.0),
    helpstring("RDCClientHost 1.0 Type Library")
]
library RDCCLIENTHOSTLib
{
    importlib("stdole2.tlb");

/*  TODO:   Find a way to define this in a common location, instead of in the client and server IDL */
    //
    //  Changes made here must be reflected in the server RDSHost IDL.
    //
    cpp_quote("")
    cpp_quote("#define DISPID_RDSCHANNELEVENTS_CHANNELDATAREADY     1")
    cpp_quote("")
    #define DISPID_RDSCHANNELEVENTS_CHANNELDATAREADY    1
    [
        uuid(59AE79BC-9721-42df-9396-9D98E7F7A396),
        helpstring("_ISAFRemoteDesktopDataChannelEvents Interface")
    ]
    dispinterface _ISAFRemoteDesktopDataChannelEvents
    {
        properties:
        methods:
        [id(DISPID_RDSCHANNELEVENTS_CHANNELDATAREADY), helpstring("method ChannelDataReady")]
            void ChannelDataReady([in]BSTR channelName);
    };

    [
        uuid(299BE050-E83E-4DB7-A7DA-D86FDEBFE6D0),
        helpstring("RemoteDesktopClientHost Class")
    ]
    coclass SAFRemoteDesktopClientHost
    {
        [default] interface ISAFRemoteDesktopClientHost;
    };

    [
        uuid(C91C2A81-8B14-4a96-A5DB-4640F551F3EE),
        helpstring("ClientDataChannel Class")
    ]
    coclass ClientDataChannel 
    {
        [default] interface ISAFRemoteDesktopDataChannel;
        [default, source] dispinterface _ISAFRemoteDesktopDataChannelEvents;
    };

    [
        uuid(078BB428-FA9B-43f1-B002-1ABF3A8C95CF),
        helpstring("ClientRemoteDesktopChannelMgr Class")
    ]
    coclass ClientRemoteDesktopChannelMgr
    {
        [default] interface ISAFRemoteDesktopChannelMgr;
        [source] dispinterface _ISAFRemoteDesktopDataChannelEvents;
    };

    [
        uuid(327A98F6-B337-43B0-A3DE-408B46E6C4CE),
        helpstring("_ISAFRemoteDesktopClientEvents Interface")
    ]
    dispinterface _ISAFRemoteDesktopClientEvents
    {
        properties:
        methods:
        [id(DISPID_RDSCLIENTEVENTS_CONNECTED), helpstring("method Connected")] void Connected();

        [id(DISPID_RDSCLIENTEVENTS_DISCONNECTED), helpstring("method Disconnected")] 
            void Disconnected([in]long reason);

        [id(DISPID_RDSCLIENTEVENTS_REMOTECONTROLREQUESTCOMPLETE), helpstring("method RemoteControlRequestComplete")] 
            void RemoteControlRequestComplete([in]long status);

        // Fire SAFERROR_NOERROR                - listen connection established
        //      SAFERROR_CONNECTIONTIMEDOUT     - listen timeout
        //      SAFERROR_OUTOFMEMORY            - out of memory
        //      SAFERROR_INTERNALERROR          - internal error
        [id(DISPID_RDSCLIENTEVENTS_LISTENCONNECT), helpstring("method ListenConnect")]
            void ListenConnect([in]long status);

        [id(DISPID_RDSCLIENTEVENTS_BEGINCONNECT), helpstring("method BeginConnect")]
            void BeginConnect();
    };

    [
        uuid(85C037E5-743F-4938-936B-A8DB95430391),
        helpstring("_IDataChannelIOEvents Interface")
    ]
    dispinterface _IDataChannelIOEvents
    {
        properties:
        methods:
        [id(DISPID_DATACHANNELEVEVENTS_DATAREADY), helpstring("method DataReady")] 
            void DataReady([in]BSTR data);
    };
    
    [
        uuid(B90D0115-3AEA-45D3-801E-93913008D49E),
        helpstring("RemoteDesktopClient Class")
    ]
    coclass SAFRemoteDesktopClient
    {
        [default] interface ISAFRemoteDesktopClient;
        interface ISAFRemoteDesktopTestExtension;
        [source] dispinterface _ISAFRemoteDesktopClientEvents;
    };

    [
        uuid(F137E241-0092-4575-976A-D3E33980BB26),
        helpstring("TSRDPRemoteDesktopClient Class")
    ]
    coclass TSRDPRemoteDesktopClient
    {
        [default] interface ISAFRemoteDesktopClient;
        interface ISAFRemoteDesktopTestExtension;
        [source] dispinterface _ISAFRemoteDesktopClientEvents;
    };
};




