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

Copyright (c) 2000 Microsoft Corporation

Module Name:
    UploadManager.idl

Abstract:
    This file contains the declaration of the set of  coclasses and interfaces
    implemented by the UploadManager.

Revision History:
    Davide Massarenti   (Dmassare)  06/13/99
        created

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

#include <UploadManagerDID.h>

import "oaidl.idl";

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

typedef [v1_enum] enum tagUL_STATUS {
    UL_NOTACTIVE    = 0x00000000, // Status before first Activate() call.
    UL_ACTIVE       = 0x00000001, // Status after Activate() call.
    UL_SUSPENDED    = 0x00000002, // Status after Suspend() call.

    UL_TRANSMITTING = 0x00000003, // Status while actually transmitted.
    UL_ABORTED      = 0x00000004, // Status after a temporary failure (no connection, etc.)
    UL_FAILED       = 0x00000005, // Status after a permanent failure (server deny, ect.)

    UL_COMPLETED    = 0x00000006, // Status after successful transmission.
    UL_DELETED      = 0x00000007, // status after deletion.
} UL_STATUS;


typedef [v1_enum] enum tagUL_MODE {
    UL_BACKGROUND = 0x00000000,
    UL_FOREGROUND = 0x00000001,
} UL_MODE;


typedef [v1_enum] enum tagUL_HISTORY {
    UL_HISTORY_NONE         = 0x00000000,
    UL_HISTORY_LOG          = 0x00000001,
    UL_HISTORY_LOG_AND_DATA = 0x00000002,
} UL_HISTORY;


[
    object,
    uuid(8E82AD10-D1A3-11D2-9374-00C04F72DAF7),
    dual,
    helpstring("IMPCUploadJob Interface"),
    pointer_default(unique)
]
interface IMPCUploadJob : IDispatch
{
    [propget, id(DISPID_UL_UPLOADJOB_SIG           )] HRESULT Sig          	( [out, retval] BSTR         *pVal   );
    [propput, id(DISPID_UL_UPLOADJOB_SIG           )] HRESULT Sig          	( [in]          BSTR          newVal );
    [propget, id(DISPID_UL_UPLOADJOB_SERVER        )] HRESULT Server       	( [out, retval] BSTR         *pVal   );
    [propput, id(DISPID_UL_UPLOADJOB_SERVER        )] HRESULT Server       	( [in]          BSTR          newVal );
    [propget, id(DISPID_UL_UPLOADJOB_JOBID         )] HRESULT JobID        	( [out, retval] BSTR         *pVal   );
    [propput, id(DISPID_UL_UPLOADJOB_JOBID         )] HRESULT JobID        	( [in]          BSTR          newVal );
    [propget, id(DISPID_UL_UPLOADJOB_PROVIDERID    )] HRESULT ProviderID   	( [out, retval] BSTR         *pVal   );
    [propput, id(DISPID_UL_UPLOADJOB_PROVIDERID    )] HRESULT ProviderID   	( [in]          BSTR          newVal );
  
    [propget, id(DISPID_UL_UPLOADJOB_CREATOR       )] HRESULT Creator     	( [out, retval] BSTR         *pVal   ); // Whistler
    [propget, id(DISPID_UL_UPLOADJOB_USERNAME      )] HRESULT Username     	( [out, retval] BSTR         *pVal   );
    [propput, id(DISPID_UL_UPLOADJOB_USERNAME      )] HRESULT Username     	( [in]          BSTR          newVal );
    [propget, id(DISPID_UL_UPLOADJOB_PASSWORD      )] HRESULT Password     	( [out, retval] BSTR         *pVal   );
    [propput, id(DISPID_UL_UPLOADJOB_PASSWORD      )] HRESULT Password     	( [in]          BSTR          newVal );
  
    [propget, id(DISPID_UL_UPLOADJOB_ORIGINALSIZE  )] HRESULT OriginalSize 	( [out, retval] long         *pVal   );
    [propget, id(DISPID_UL_UPLOADJOB_TOTALSIZE     )] HRESULT TotalSize    	( [out, retval] long         *pVal   );
    [propget, id(DISPID_UL_UPLOADJOB_SENTSIZE      )] HRESULT SentSize     	( [out, retval] long         *pVal   );
  
    [propget, id(DISPID_UL_UPLOADJOB_HISTORY       )] HRESULT History      	( [out, retval] UL_HISTORY   *pVal   );
    [propput, id(DISPID_UL_UPLOADJOB_HISTORY       )] HRESULT History      	( [in]          UL_HISTORY    newVal );
    [propget, id(DISPID_UL_UPLOADJOB_STATUS        )] HRESULT Status       	( [out, retval] UL_STATUS    *pVal   );
    [propget, id(DISPID_UL_UPLOADJOB_ERRORCODE     )] HRESULT ErrorCode    	( [out, retval] long         *pVal   );
  
    [propget, id(DISPID_UL_UPLOADJOB_MODE          )] HRESULT Mode         	( [out, retval] UL_MODE      *pVal   );
    [propput, id(DISPID_UL_UPLOADJOB_MODE          )] HRESULT Mode         	( [in]          UL_MODE       newVal );
    [propget, id(DISPID_UL_UPLOADJOB_PERSISTTODISK )] HRESULT PersistToDisk	( [out, retval] VARIANT_BOOL *pVal   );
    [propput, id(DISPID_UL_UPLOADJOB_PERSISTTODISK )] HRESULT PersistToDisk	( [in]          VARIANT_BOOL  newVal );
    [propget, id(DISPID_UL_UPLOADJOB_COMPRESSED    )] HRESULT Compressed   	( [out, retval] VARIANT_BOOL *pVal   );
    [propput, id(DISPID_UL_UPLOADJOB_COMPRESSED    )] HRESULT Compressed   	( [in]          VARIANT_BOOL  newVal );
    [propget, id(DISPID_UL_UPLOADJOB_PRIORITY      )] HRESULT Priority     	( [out, retval] long         *pVal   );
    [propput, id(DISPID_UL_UPLOADJOB_PRIORITY      )] HRESULT Priority     	( [in]          long          newVal );

    [propget, id(DISPID_UL_UPLOADJOB_CREATIONTIME  )] HRESULT CreationTime 	( [out, retval] DATE         *pVal   );
    [propget, id(DISPID_UL_UPLOADJOB_COMPLETETIME  )] HRESULT CompleteTime 	( [out, retval] DATE         *pVal   );
    [propget, id(DISPID_UL_UPLOADJOB_EXPIRATIONTIME)] HRESULT ExpirationTime( [out, retval] DATE         *pVal   ); // Whistler
    [propput, id(DISPID_UL_UPLOADJOB_EXPIRATIONTIME)] HRESULT ExpirationTime( [in]          DATE          newVal ); // Whistler

    [propput, id(DISPID_UL_UPLOADJOB_ONSTATUSCHANGE  )] HRESULT onStatusChange  ( [in] IDispatch* function );
    [propput, id(DISPID_UL_UPLOADJOB_ONPROGRESSCHANGE)] HRESULT onProgressChange( [in] IDispatch* function );

    [id(DISPID_UL_UPLOADJOB_ACTIVATESYNC )] HRESULT ActivateSync ();
    [id(DISPID_UL_UPLOADJOB_ACTIVATEASYNC)] HRESULT ActivateAsync();
    [id(DISPID_UL_UPLOADJOB_SUSPEND      )] HRESULT Suspend      ();
    [id(DISPID_UL_UPLOADJOB_DELETE       )] HRESULT Delete       ();

    [id(DISPID_UL_UPLOADJOB_GETDATAFROMFILE    )] HRESULT GetDataFromFile  	 ( [in		   ] BSTR      	bstrFilename );
    [id(DISPID_UL_UPLOADJOB_PUTDATAINTOFILE    )] HRESULT PutDataIntoFile  	 ( [in		   ] BSTR      	bstrFilename );
    [id(DISPID_UL_UPLOADJOB_GETDATAFROMSTREAM  )] HRESULT GetDataFromStream	 ( [in		   ] IUnknown* 	stream       );
    [id(DISPID_UL_UPLOADJOB_PUTDATAINTOSTREAM  )] HRESULT PutDataIntoStream	 ( [out, retval] IUnknown* *pstream      );
    [id(DISPID_UL_UPLOADJOB_GETRESPONSEASSTREAM)] HRESULT GetResponseAsStream( [out, retval] IUnknown* *pstream      ); // Whistler
};

[
    uuid(8E82AD12-D1A3-11D2-9374-00C04F72DAF7),
    helpstring("DMPCUploadEvents Interface")
]
dispinterface DMPCUploadEvents
{
    properties:
    methods:
    [id(DISPID_UL_UPLOADEVENTS_ONSTATUSCHANGE  )] HRESULT onStatusChange  ( [in] IMPCUploadJob* mpcujJob, [in] UL_STATUS usStatus                      );
    [id(DISPID_UL_UPLOADEVENTS_ONPROGRESSCHANGE)] HRESULT onProgressChange( [in] IMPCUploadJob* mpcujJob, [in] long lCurrentSize, [in] long lTotalSize );
};


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

[
    object,
    uuid(8E82AD13-D1A3-11D2-9374-00C04F72DAF7),
    dual,
    helpstring("IMPCUpload Interface"),
    pointer_default(unique)
]
interface IMPCUpload : IDispatch
{
    [propget, id(DISPID_NEWENUM),       ] HRESULT _NewEnum(                  [out, retval] IUnknown*      *pVal );
    [         id(DISPID_VALUE),         ] HRESULT Item    ( [in] long index, [out, retval] IMPCUploadJob* *pVal );
    [propget, id(DISPID_UL_UPLOAD_COUNT)] HRESULT Count   (                  [out, retval] long           *pVal );

    [id(DISPID_UL_UPLOAD_CREATEJOB)] HRESULT CreateJob( [out, retval ] IMPCUploadJob* *pVal );
};

[
    object,
    uuid(8E82AD14-D1A3-11D2-9374-00C04F72DAF7),
    dual,
    helpstring("IMPCConnection Interface"),
    pointer_default(unique)
]
interface IMPCConnection : IDispatch
{
    [propget, id(DISPID_UL_CONNECTION_AVAILABLE)] HRESULT Available( [out, retval] VARIANT_BOOL *pfOnline     );
    [propget, id(DISPID_UL_CONNECTION_ISAMODEM )] HRESULT IsAModem ( [out, retval] VARIANT_BOOL *pfModem      );
    [propget, id(DISPID_UL_CONNECTION_BANDWIDTH)] HRESULT Bandwidth( [out, retval] long         *pdwBandwidth );
};

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

[
    uuid(8E82AD00-D1A3-11D2-9374-00C04F72DAF7),
    version(1.0),
    helpstring("UploadManager 1.0 Type Library")
]
library UPLOADMANAGERLib
{
    importlib("stdole32.tlb");
    importlib("stdole2.tlb");

    dispinterface DMPCUploadEvents;
    interface     IMPCUploadJob;

    interface IConnectionPointContainer;
    interface IConnectionPoint;

    [
        uuid(8E82AD02-D1A3-11D2-9374-00C04F72DAF7),
        helpstring("MPCUpload Class")
    ]
    coclass MPCUpload
    {
        [default] interface IMPCUpload;
    };

    [
        uuid(8E82AD03-D1A3-11D2-9374-00C04F72DAF7),
        helpstring("MPCConnection Class")
    ]
    coclass MPCConnection
    {
        [default] interface IMPCConnection;
    };

    [
        uuid(8E82AD04-D1A3-11D2-9374-00C04F72DAF7),
        helpstring("MPCUploadJob Class"),
        noncreatable
    ]
    coclass MPCUploadJob
    {
        [default]         interface     IMPCUploadJob;
        [default, source] dispinterface DMPCUploadEvents;
    }

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

    [
        uuid(8E82AD05-D1A3-11D2-9374-00C04F72DAF7),
        helpstring("MPCUploadReal Class")
    ]
    coclass MPCUploadReal
    {
        [default] interface IMPCUpload;
    };

    [
        uuid(8E82AD06-D1A3-11D2-9374-00C04F72DAF7),
        helpstring("MPCConnectionReal Class")
    ]
    coclass MPCConnectionReal
    {
        [default] interface IMPCConnection;
    };


};
