/********************************************************************

Copyright (c) 1999 Microsoft Corporation

Module Name:
    SAF.idl

Abstract:
    This file includes the declaration for all ISAFChannel objects

Revision History:
    Steve Shih  created  07/15/99

    Kalyani Narlanka Changes to ISAFChannel, ISAFIncidentItem

    Kalyani Narlanka    (kalyanin)  06/28/'00
        Added Interface for Encryption

    Kalyani Narlanka    (kalyanin)  9/29/2000
        Added Interfaces for Unsolicited Remote Control

	Juan J. Perez		(jperez) 
		Added Interfaces for Voice over IP (ISAFIntercomClient and ISAFIntercomServer)

	Juan J. Perez		(jperez)    01/08/2001
		Added Interface (ISAFChannelNotifyIncident)


********************************************************************/

cpp_quote( "#include <SAFDID.h>" )
#include <SAFDID.h>

typedef enum {
    pchIncidentInvalid  = 0,
    pchIncidentOpen     = 1,
    pchIncidentClosed   = 2,
    pchIncidentMax      = 3
} IncidentStatusEnum;

typedef enum
{
    pchIncidentsInvalid        = 0,
    pchAllIncidents            = 1,
    pchOpenIncidents           = 2,
    pchClosedIncidents         = 3,
    pchAllIncidentsAllUsers    = 4,
    pchOpenIncidentsAllUsers   = 5,
    pchClosedIncidentsAllUsers = 6,
    pchIncidentsMax            = 7
} IncidentCollectionOptionEnum;

typedef enum
{
    pchActive                  = 0,
    pchConnected               = 1,
    pchConnectQuery            = 2,
    pchShadow                  = 3,
    pchDisconnected            = 4,
    pchIdle                    = 5,
    pchListen                  = 6,
    pchReset                   = 7,
    pchDown                    = 8,
    pchInit                    = 9,
    pchStateInvalid            =10
} SessionStateEnum;

[
    object,
        uuid(833E4180-AFF7-4AC3-AAC2-9F24C1457BCE),
    dual,
    oleautomation,
    helpstring("ISAFReg Interface"),
    pointer_default(unique)
]
interface ISAFReg : IDispatch
{
    //
    // Properties
    //
    [propget, id(DISPID_SAF_SR__EOF               )] HRESULT EOF               ( [out, retval] VARIANT_BOOL *pVal );
    [propget, id(DISPID_SAF_SR__VENDORID          )] HRESULT VendorID          ( [out, retval] BSTR         *pVal );
    [propget, id(DISPID_SAF_SR__PRODUCTID         )] HRESULT ProductID         ( [out, retval] BSTR         *pVal );
    [propget, id(DISPID_SAF_SR__VENDORNAME        )] HRESULT VendorName        ( [out, retval] BSTR         *pVal );
    [propget, id(DISPID_SAF_SR__PRODUCTNAME       )] HRESULT ProductName       ( [out, retval] BSTR         *pVal );
    [propget, id(DISPID_SAF_SR__PRODUCTDESCRIPTION)] HRESULT ProductDescription( [out, retval] BSTR         *pVal );
    [propget, id(DISPID_SAF_SR__VENDORICON        )] HRESULT VendorIcon        ( [out, retval] BSTR         *pVal );
    [propget, id(DISPID_SAF_SR__SUPPORTURL        )] HRESULT SupportUrl        ( [out, retval] BSTR         *pVal );

    [propget, id(DISPID_SAF_SR__PUBLICKEY         )] HRESULT PublicKey         ( [out, retval] BSTR         *pVal );
    [propget, id(DISPID_SAF_SR__USERACCOUNT       )] HRESULT UserAccount       ( [out, retval] BSTR         *pVal );

    //
    // Methods
    //
    [id(DISPID_SAF_SR__MOVEFIRST)] HRESULT MoveFirst();
    [id(DISPID_SAF_SR__MOVENEXT )] HRESULT MoveNext ();
};

[
    object,
    uuid(833E4181-AFF7-4AC3-AAC2-9F24C1457BCE),
    dual,
    oleautomation,
    helpstring("ISAFChannel Interface"),
    pointer_default(unique)
]
interface ISAFChannel : IDispatch
{
    //
    // Properties
    //
    [propget, id(DISPID_SAF_C__VENDORID       )] HRESULT VendorID       ( [out, retval] BSTR *pVal );
    [propget, id(DISPID_SAF_C__PRODUCTID      )] HRESULT ProductID      ( [out, retval] BSTR *pVal );
    [propget, id(DISPID_SAF_C__VENDORNAME     )] HRESULT VendorName     ( [out, retval] BSTR *pVal );
    [propget, id(DISPID_SAF_C__PRODUCTNAME    )] HRESULT ProductName    ( [out, retval] BSTR *pVal );
    [propget, id(DISPID_SAF_C__DESCRIPTION    )] HRESULT Description    ( [out, retval] BSTR *pVal );
    [propget, id(DISPID_SAF_C__VENDORDIRECTORY)] HRESULT VendorDirectory( [out, retval] BSTR *pVal );

    [propget, id(DISPID_SAF_C__SECURITY       )] HRESULT Security       ( [out, retval] IPCHSecurityDescriptor* *pVal   );
    [propput, id(DISPID_SAF_C__SECURITY       )] HRESULT Security       ( [in]          IPCHSecurityDescriptor*  newVal );

	[propget, id(DISPID_SAF_C__NOTIFICATION   )] HRESULT Notification   ( [out, retval] BSTR *pVal );
	[propput, id(DISPID_SAF_C__NOTIFICATION   )] HRESULT Notification   ( [in]			BSTR newVal);


    //
    // Methods
    //
    [id(DISPID_SAF_C__INCIDENTS     )] HRESULT Incidents( [in] IncidentCollectionOptionEnum opt, [out, retval] IPCHCollection* *ppVal );

    [id(DISPID_SAF_C__RECORDINCIDENT)] HRESULT RecordIncident( [in          ] BSTR               bstrDisplay  ,
                                                               [in          ] BSTR               bstrURL      ,
                                                               [in, optional] VARIANT            vProgress    ,
                                                               [in, optional] VARIANT            vXMLDataFile ,
                                                               [in, optional] VARIANT            vXMLBlob     ,
                                                               [out,retval  ] ISAFIncidentItem* *pVal         );



};

[
    object,
    uuid(833E4182-AFF7-4AC3-AAC2-9F24C1457BCE),
    dual,
    oleautomation,
    helpstring("ISAFIncidentItem Interface"),
    pointer_default(unique)
]
interface ISAFIncidentItem : IDispatch
{
    //
    // Properties
    //
    [propget, id(DISPID_SAF_II__DISPLAYSTRING)] HRESULT DisplayString( [out, retval] BSTR                    *pVal   );
    [propput, id(DISPID_SAF_II__DISPLAYSTRING)] HRESULT DisplayString( [in]          BSTR                     newVal );
    [propget, id(DISPID_SAF_II__URL          )] HRESULT URL          ( [out, retval] BSTR                    *pVal   );
    [propput, id(DISPID_SAF_II__URL          )] HRESULT URL          ( [in]          BSTR                     newVal );
    [propget, id(DISPID_SAF_II__PROGRESS     )] HRESULT Progress     ( [out, retval] BSTR                    *pVal   );
    [propput, id(DISPID_SAF_II__PROGRESS     )] HRESULT Progress     ( [in]          BSTR                     newVal );
    [propget, id(DISPID_SAF_II__XMLDATAFILE  )] HRESULT XMLDataFile  ( [out, retval] BSTR                    *pVal   );
    [propput, id(DISPID_SAF_II__XMLDATAFILE  )] HRESULT XMLDataFile  ( [in]          BSTR                     newVal );
    [propget, id(DISPID_SAF_II__XMLBLOB      )] HRESULT XMLBlob      ( [out, retval] BSTR                    *pVal   );
    [propput, id(DISPID_SAF_II__XMLBLOB      )] HRESULT XMLBlob      ( [in]          BSTR                     newVal );
    [propget, id(DISPID_SAF_II__CREATIONTIME )] HRESULT CreationTime ( [out, retval] DATE                    *pVal   );
    [propget, id(DISPID_SAF_II__CHANGEDTIME  )] HRESULT ChangedTime  ( [out, retval] DATE                    *pVal   );
    [propget, id(DISPID_SAF_II__CLOSEDTIME   )] HRESULT ClosedTime   ( [out, retval] DATE                    *pVal   );
    [propget, id(DISPID_SAF_II__STATUS       )] HRESULT Status       ( [out, retval] IncidentStatusEnum      *pVal   );

    [propget, id(DISPID_SAF_II__SECURITY     )] HRESULT Security     ( [out, retval] IPCHSecurityDescriptor* *pVal   );
    [propput, id(DISPID_SAF_II__SECURITY     )] HRESULT Security     ( [in]          IPCHSecurityDescriptor*  newVal );
    [propget, id(DISPID_SAF_II__OWNER        )] HRESULT Owner        ( [out, retval] BSTR                    *pVal   );

    //
    // Methods
    //
    [id(DISPID_SAF_II__CLOSEINCIDENTITEM )] HRESULT CloseIncidentItem ();
    [id(DISPID_SAF_II__DELETEINCIDENTITEM)] HRESULT DeleteIncidentItem();
};

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

typedef [v1_enum] enum tagEUploadType {
    eutBug          = 0x00000000,
    eutEscalated    = 0x00000001,
    eutNonEscalated = 0x00000002,
} EUploadType;


[
    object,
    uuid(833E4183-AFF7-4AC3-AAC2-9F24C1457BCE),
    dual,
    oleautomation,
    helpstring("ISAFIncident Interface"),
    pointer_default(unique)
]
interface ISAFIncident : IDispatch
{
    //
    // Properties
    //
    [propget, id(DISPID_SAF_INC__MISC              )] HRESULT Misc              ( [out, retval] IDispatch*  *ppdispDict );
    [propput, id(DISPID_SAF_INC__SELFHELPTRACE     )] HRESULT SelfHelpTrace     ( [in]          IUnknown    *punkStr    );
    [propput, id(DISPID_SAF_INC__MACHINEHISTORY    )] HRESULT MachineHistory    ( [in]          IUnknown    *punkStm    );
    [propput, id(DISPID_SAF_INC__MACHINESNAPSHOT   )] HRESULT MachineSnapshot   ( [in]          IUnknown    *punkStm    );
    [propget, id(DISPID_SAF_INC__PROBLEMDESCRIPTION)] HRESULT ProblemDescription( [out, retval] BSTR        *pbstrVal   );
    [propput, id(DISPID_SAF_INC__PROBLEMDESCRIPTION)] HRESULT ProblemDescription( [in]          BSTR         bstrVal    );
    [propget, id(DISPID_SAF_INC__PRODUCTNAME       )] HRESULT ProductName       ( [out, retval] BSTR        *pbstrVal   );
    [propput, id(DISPID_SAF_INC__PRODUCTNAME       )] HRESULT ProductName       ( [in]          BSTR         bstrVal    );
    [propget, id(DISPID_SAF_INC__PRODUCTID         )] HRESULT ProductID         ( [out, retval] BSTR        *pbstrVal   );
    [propput, id(DISPID_SAF_INC__PRODUCTID         )] HRESULT ProductID         ( [in]          BSTR         bstrVal    );
    [propget, id(DISPID_SAF_INC__USERNAME          )] HRESULT UserName          ( [out, retval] BSTR        *pbstrVal   );
    [propput, id(DISPID_SAF_INC__USERNAME          )] HRESULT UserName          ( [in]          BSTR         bstrVal    );
    [propget, id(DISPID_SAF_INC__UPLOADTYPE        )] HRESULT UploadType        ( [out, retval] EUploadType *peut       );
    [propput, id(DISPID_SAF_INC__UPLOADTYPE        )] HRESULT UploadType        ( [in]          EUploadType  eut        );
    [propget, id(DISPID_SAF_INC__INCIDENTXSL       )] HRESULT IncidentXSL       ( [out, retval] BSTR        *pbstrVal   );
    [propput, id(DISPID_SAF_INC__INCIDENTXSL       )] HRESULT IncidentXSL       ( [in]          BSTR         bstrVal    );


    // Salem Changes
    [propget, id(DISPID_SAF_INC__RCREQUESTED       )] HRESULT RCRequested       ( [out, retval] VARIANT_BOOL *pVal      );
    [propput, id(DISPID_SAF_INC__RCREQUESTED       )] HRESULT RCRequested       ( [in]          VARIANT_BOOL  Val       );
    [propget, id(DISPID_SAF_INC__RCENCRYPTED       )] HRESULT RCTicketEncrypted ( [out, retval] VARIANT_BOOL *pVal      );
    [propput, id(DISPID_SAF_INC__RCENCRYPTED       )] HRESULT RCTicketEncrypted ( [in]          VARIANT_BOOL  Val       );
    [propget, id(DISPID_SAF_INC__RCTICKET          )] HRESULT RCTicket          ( [out, retval] BSTR         *pbstrVal  );
    [propput, id(DISPID_SAF_INC__RCTICKET          )] HRESULT RCTicket          ( [in]          BSTR          bstrVal   );
    [propget, id(DISPID_SAF_INC__STARTPAGE         )] HRESULT StartPage         ( [out, retval] BSTR         *pbstrVal  );
    [propput, id(DISPID_SAF_INC__STARTPAGE         )] HRESULT StartPage         ( [in]          BSTR          bstrVal   );

    //
    // Methods
    //
    [id(DISPID_SAF_INC__LOADFROMSTREAM)] HRESULT LoadFromStream( [in]          IUnknown*  punkStm      );
    [id(DISPID_SAF_INC__SAVETOSTREAM  )] HRESULT SaveToStream  ( [out, retval] IUnknown* *ppunkStm     );
    [id(DISPID_SAF_INC__LOAD          )] HRESULT Load          ( [in]          BSTR       bstrFileName );
    [id(DISPID_SAF_INC__SAVE          )] HRESULT Save          ( [in]          BSTR       bstrFileName );
    [id(DISPID_SAF_INC__GETXMLASSTREAM)] HRESULT GetXMLAsStream( [out, retval] IUnknown* *ppunkStm     );
    [id(DISPID_SAF_INC__GETXML        )] HRESULT GetXML        ( [in]          BSTR       bstrFileName );

    // Methods to load incident from XML.
    [id(DISPID_SAF_INC__LOADFROMXMLSTREAM )] HRESULT LoadFromXMLStream   ( [in]          IUnknown*  punkStm      );
    [id(DISPID_SAF_INC__LOADFROMXMLFILE   )] HRESULT LoadFromXMLFile     ( [in]          BSTR       bstrFileName );
    [id(DISPID_SAF_INC__LOADFROMXMLSTRING )] HRESULT LoadFromXMLString   ( [in]          BSTR       bstrXMLBlob  );

};

////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////

typedef [v1_enum] enum tagDC_STATUS {
    DC_NOTACTIVE    = 0x00000000, // Status before first ExecuteXXXX() call.
    DC_COLLECTING   = 0x00000001, // Status after ExecuteXXXX() call.
    DC_COMPARING    = 0x00000005, // Status after CompareSnapshots() call.
    DC_FAILED       = 0x00000002, // Status after failure (server deny, ect.)
    DC_COMPLETED    = 0x00000003, // Status after successful data collection.
    DC_NODELTA      = 0x00000004, // No delta has been generated from the comparison.
} DC_STATUS;


[
    object,
    uuid(833E4190-AFF7-4AC3-AAC2-9F24C1457BCE),
    dual,
    oleautomation,
    helpstring("ISAFDataCollection Interface"),
    pointer_default(unique)
]
interface ISAFDataCollection : IDispatch
{
    //
    // Properties
    //
    [propget, id(DISPID_SAF_DC__STATUS                    )] HRESULT Status                    ( [out, retval] DC_STATUS       *pVal     );
    [propget, id(DISPID_SAF_DC__PERCENTDONE               )] HRESULT PercentDone               ( [out, retval] long            *pVal     );
    [propget, id(DISPID_SAF_DC__ERRORCODE                 )] HRESULT ErrorCode                 ( [out, retval] long            *pVal     );

    [propget, id(DISPID_SAF_DC__MACHINEDATA_DATASPEC      )] HRESULT MachineData_DataSpec      ( [out, retval] BSTR            *pVal     );
    [propput, id(DISPID_SAF_DC__MACHINEDATA_DATASPEC      )] HRESULT MachineData_DataSpec      ( [in]          BSTR             newVal   );
    [propget, id(DISPID_SAF_DC__HISTORY_DATASPEC          )] HRESULT History_DataSpec          ( [out, retval] BSTR            *pVal     );
    [propput, id(DISPID_SAF_DC__HISTORY_DATASPEC          )] HRESULT History_DataSpec          ( [in]          BSTR             newVal   );
    [propget, id(DISPID_SAF_DC__HISTORY_MAXDELTAS         )] HRESULT History_MaxDeltas         ( [out, retval] long            *pVal     );
    [propput, id(DISPID_SAF_DC__HISTORY_MAXDELTAS         )] HRESULT History_MaxDeltas         ( [in]          long             newVal   );
    [propget, id(DISPID_SAF_DC__HISTORY_MAXSUPPORTEDDELTAS)] HRESULT History_MaxSupportedDeltas( [out, retval] long            *pVal     );

    [propput, id(DISPID_SAF_DC__ONSTATUSCHANGE            )] HRESULT onStatusChange            ( [in]          IDispatch*       function );
    [propput, id(DISPID_SAF_DC__ONPROGRESS                )] HRESULT onProgress                ( [in]          IDispatch*       function );
    [propput, id(DISPID_SAF_DC__ONCOMPLETE                )] HRESULT onComplete                ( [in]          IDispatch*       function );

    [propget, id(DISPID_SAF_DC__REPORTS                   )] HRESULT Reports                   ( [out, retval] IPCHCollection* *ppC      );

    //
    // Methods
    //
    [id(DISPID_SAF_DC__COMPARE_SNAPSHOTS)] HRESULT CompareSnapshots( [in] BSTR bstrFilenameT0,  [in] BSTR bstrFilenameT1, [in] BSTR bstrFilenameDiff );

    [id(DISPID_SAF_DC__EXECUTESYNC )] HRESULT ExecuteSync ();
    [id(DISPID_SAF_DC__EXECUTEASYNC)] HRESULT ExecuteAsync();
    [id(DISPID_SAF_DC__ABORT       )] HRESULT Abort       ();

    [id(DISPID_SAF_DC__MACHINEDATA_GETSTREAM)] HRESULT MachineData_GetStream( [out, retval] IUnknown* *stream );
    [id(DISPID_SAF_DC__HISTORY_GETSTREAM    )] HRESULT History_GetStream    ( [out, retval] IUnknown* *stream );
};

[
    uuid(833E4191-AFF7-4AC3-AAC2-9F24C1457BCE),
    helpstring("DSAFDataCollectionEvents Interface")
]
dispinterface DSAFDataCollectionEvents
{
    properties:
    methods:
    [id(DISPID_SAF_DCE__ONSTATUSCHANGE)] HRESULT onStatusChange( ISAFDataCollection* pchdc, long lStatus            );
    [id(DISPID_SAF_DCE__ONPROGRESS    )] HRESULT onProgress    ( ISAFDataCollection* pchdc, long lDone, long lTotal );
    [id(DISPID_SAF_DCE__ONCOMPLETE    )] HRESULT onComplete    ( ISAFDataCollection* pchdc, HRESULT hrRes           );
};

[
    object,
    uuid(833E4192-AFF7-4AC3-AAC2-9F24C1457BCE),
    dual,
    oleautomation,
    helpstring("ISAFDataCollectionReport Interface"),
    pointer_default(unique)
]
interface ISAFDataCollectionReport : IDispatch
{
    //
    // Properties
    //
    [propget, id(DISPID_SAF_DCR__NAMESPACE  )] HRESULT Namespace  ( [out, retval] BSTR *pVal );
    [propget, id(DISPID_SAF_DCR__CLASS      )] HRESULT Class      ( [out, retval] BSTR *pVal );
    [propget, id(DISPID_SAF_DCR__WQL        )] HRESULT WQL        ( [out, retval] BSTR *pVal );
    [propget, id(DISPID_SAF_DCR__ERRORCODE  )] HRESULT ErrorCode  ( [out, retval] long *pVal );
    [propget, id(DISPID_SAF_DCR__DESCRIPTION)] HRESULT Description( [out, retval] BSTR *pVal );
};

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

typedef [v1_enum] enum tagCB_STATUS {
    CB_NOTACTIVE   = 0x00000000,
    CB_COMPRESSING = 0x00000001,
    CB_COMPLETED   = 0x00000002,
    CB_FAILED      = 0x00000003,
} CB_STATUS;

[
    object,
    uuid(833E41A0-AFF7-4AC3-AAC2-9F24C1457BCE),
    dual,
    oleautomation,
    helpstring("ISAFCabinet Interface"),
    pointer_default(unique)
]
interface ISAFCabinet : IDispatch
{
    //
    // Properties
    //
    [propput, id(DISPID_SAF_CB__IGNOREMISSINGFILES)] HRESULT IgnoreMissingFiles( [in]          VARIANT_BOOL  fIgnoreMissingFiles );
    [propput, id(DISPID_SAF_CB__ONPROGRESSFILES   )] HRESULT onProgressFiles   ( [in]          IDispatch*    function            );
    [propput, id(DISPID_SAF_CB__ONPROGRESSBYTES   )] HRESULT onProgressBytes   ( [in]          IDispatch*    function            );
    [propput, id(DISPID_SAF_CB__ONCOMPLETE        )] HRESULT onComplete        ( [in]          IDispatch*    function            );
    [propget, id(DISPID_SAF_CB__STATUS            )] HRESULT Status            ( [out, retval] CB_STATUS    *pVal                );
    [propget, id(DISPID_SAF_CB__ERRORCODE         )] HRESULT ErrorCode         ( [out, retval] long         *pVal                );

    //
    // Methods
    //
    [id(DISPID_SAF_CB__ADDFILE )] HRESULT AddFile ( [in] BSTR bstrFilePath   , [in, optional] VARIANT vFileName );
    [id(DISPID_SAF_CB__COMPRESS)] HRESULT Compress( [in] BSTR bstrCabinetFile                                   );
    [id(DISPID_SAF_CB__ABORT   )] HRESULT Abort   ();
};


[
    uuid(833E41A1-AFF7-4AC3-AAC2-9F24C1457BCE),
    helpstring("DSAFCabinetEvents Interface")
]
dispinterface DSAFCabinetEvents
{
    properties:
    methods:
    [id(DISPID_SAF_CBE__ONPROGRESSFILES)] HRESULT onProgressFiles( ISAFCabinet* hcpcb, BSTR bstrFile, long lDone, long lTotal );
    [id(DISPID_SAF_CBE__ONPROGRESSBYTES)] HRESULT onProgressBytes( ISAFCabinet* hcpcb,                long lDone, long lTotal );
    [id(DISPID_SAF_CBE__ONCOMPLETE     )] HRESULT onComplete     ( ISAFCabinet* hcpcb, HRESULT hrRes                          );
};

// Encryption
[
    object,
    uuid(833E41A8-AFF7-4AC3-AAC2-9F24C1457BCE),
    dual,
    oleautomation,
    helpstring("ISAFEncrypt Interface"),
    pointer_default(unique)
]
interface ISAFEncrypt : IDispatch
{
    //
    // Properties
    //
    // TODO? Need an enumerator for the different available encryption types.
    [propget, id(DISPID_SAF_ENC__ENCRYPTIONTYPE  )] HRESULT EncryptionType( [out, retval] long *pLongVal );
    [propput, id(DISPID_SAF_ENC__ENCRYPTIONTYPE  )] HRESULT EncryptionType( [in]          long  LongVal  );

    //
    // Methods
    //
    [id(DISPID_SAF_ENC__ENCRYPTSTRING )] HRESULT EncryptString( [in] BSTR bstrEncryptionkey,  [in] BSTR bstrInputString, [out, retval] BSTR      *bstrEncryptedString );
    [id(DISPID_SAF_ENC__DECRYPTSTRING )] HRESULT DecryptString( [in] BSTR bstrEncryptionkey,  [in] BSTR bstrInputString, [out, retval] BSTR      *bstrDecryptedString );
    [id(DISPID_SAF_ENC__ENCRYPTFILE   )] HRESULT EncryptFile  ( [in] BSTR bstrEncryptionKey,  [in] BSTR bstrInputFile,   [in         ] BSTR       bstrEncryptedFile   );
    [id(DISPID_SAF_ENC__DECRYPTFILE   )] HRESULT DecryptFile  ( [in] BSTR bstrEncryptionKey,  [in] BSTR bstrInputFile,   [in         ] BSTR       bstrDecryptedFile   );
    [id(DISPID_SAF_ENC__ENCRYPTSTREAM )] HRESULT EncryptStream( [in] BSTR bstrEncryptionKey,  [in] IUnknown *punkInStm,  [out, retval] IUnknown* *ppunkOutStm         );
    [id(DISPID_SAF_ENC__DECRYPTSTREAM )] HRESULT DecryptStream( [in] BSTR bstrEncryptionKey,  [in] IUnknown *punkInStm,  [out, retval] IUnknown* *ppunkOutStm         );
};

// Following interfaces For Unsolicited Remote Control

[
    object,
    uuid(833E41A9-AFF7-4AC3-AAC2-9F24C1457BCE),
    dual,
    oleautomation,
    helpstring("ISAFUser Interface"),
    pointer_default(unique)
]
interface ISAFUser : IDispatch
{
    //
    // Properties
    //
    [propget, id(DISPID_SAF_USER__DOMAINNAME)] HRESULT DomainName( [out, retval] BSTR *pVal );
    [propget, id(DISPID_SAF_USER__USERNAME  )] HRESULT UserName  ( [out, retval] BSTR *pVal );
    [propput, id(DISPID_SAF_USER__DOMAINNAME)] HRESULT DomainName( [in         ] BSTR  pVal );
    [propput, id(DISPID_SAF_USER__USERNAME  )] HRESULT UserName  ( [in         ] BSTR  pVal );
};

[
    object,
    uuid(833E41AA-AFF7-4AC3-AAC2-9F24C1457BCE),
    dual,
    oleautomation,
    helpstring("ISAFSession Interface"),
    pointer_default(unique)
]

interface ISAFSession : IDispatch
{
    //Properties
    [propget, id(DISPID_SAF_SESS__SESSIONID   )] HRESULT SessionID   ( [out, retval] DWORD                   *pVal   );
    [propput, id(DISPID_SAF_SESS__SESSIONID   )] HRESULT SessionID   ( [in         ] DWORD                    pVal   );
    [propget, id(DISPID_SAF_SESS__SESSIONSTATE)] HRESULT SessionState( [out, retval] SessionStateEnum        *pVal   );
    [propput, id(DISPID_SAF_SESS__SESSIONSTATE)] HRESULT SessionState( [in         ] SessionStateEnum         pVal   );
    [propget, id(DISPID_SAF_SESS__DOMAINNAME  )] HRESULT DomainName  ( [out, retval] BSTR                    *pVal   );
    [propput, id(DISPID_SAF_SESS__DOMAINNAME  )] HRESULT DomainName  ( [in         ] BSTR                     pVal   );
    [propget, id(DISPID_SAF_SESS__USERNAME    )] HRESULT UserName    ( [out, retval] BSTR                    *pVal   );
    [propput, id(DISPID_SAF_SESS__USERNAME    )] HRESULT UserName    ( [in         ] BSTR                     pVal   );
};


[
    object,
    uuid(833E41AB-AFF7-4AC3-AAC2-9F24C1457BCE),
    dual,
    oleautomation,
    helpstring("ISAFRemoteConnectionData Interface"),
    pointer_default(unique)
]
interface ISAFRemoteConnectionData : IDispatch
{
    //
    // Methods
    //
    [id(DISPID_SAF_RCD__CONNECTIONPARMS)] HRESULT ConnectionParms( [in		   ] BSTR  bstrServerName       ,
																   [in		   ] BSTR  bstrUserName         ,
																   [in		   ] BSTR  bstrDomainName       ,
																   [in		   ] long  lSessionID           ,
																   [in         ] BSTR  bstrUserHelpBlob     ,
																   [out, retval] BSTR *bstrConnectionString );

    [id(DISPID_SAF_RCD__USERS   )] HRESULT Users   (                                                                       [out, retval] IPCHCollection* *ppUsers    );
    [id(DISPID_SAF_RCD__SESSIONS)] HRESULT Sessions( [in, optional] VARIANT vUserName, [in, optional] VARIANT vDomainName, [out, retval] IPCHCollection* *ppSessions );
};

[
    object,
    uuid(833E41AC-AFF7-4AC3-AAC2-9F24C1457BCE),
    dual,
    oleautomation,
    helpstring("ISAFRemoteDesktopConnection Interface"),
    pointer_default(unique)
]
interface ISAFRemoteDesktopConnection : IDispatch
{
    //
    // Methods
    //
    [id(DISPID_SAF_RDC__CONNECTREMOTEDESKTOP)] HRESULT ConnectRemoteDesktop( [in] BSTR ServerName, [out, retval] ISAFRemoteConnectionData* *ppRCD );
};



[
	object,
	uuid(833E41B0-AFF7-4AC3-AAC2-9F24C1457BCE),
	dual,
	oleautomation,
	helpstring("ISAFChannelNotifyIncident Interface"),
	pointer_default(unique)
]
interface ISAFChannelNotifyIncident : IDispatch
{
	[id(DISPID_SAF_CNOTI_ADD), helpstring("method onIncidentAdded")] HRESULT onIncidentAdded(ISAFChannel * ch, ISAFIncidentItem * inc, long n);
	[id(DISPID_SAF_CNOTI_REMOVE), helpstring("method onIncidentRemoved")] HRESULT onIncidentRemoved(ISAFChannel * ch, ISAFIncidentItem * inc, long n);
	[id(DISPID_SAF_CNOTI_UPDATE), helpstring("method onIncidentUpdated")] HRESULT onIncidentUpdated(ISAFChannel * ch, ISAFIncidentItem * inc, long n);
	[id(DISPID_SAF_CNOTI_CHUPDATE), helpstring("method onChannelUpdated")] HRESULT onChannelUpdated(ISAFChannel * ch, long dwCode, long n);
};
