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

Copyright (c) 2000 Microsoft Corporation

Module Name:
    UploadServerCustom.idl

Abstract:
    This file contains the declaration of the set of pseudo-COM interfaces
    used by custom providers.

Revision History:
    created     derekm      04/21/00

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

import "oaidl.idl";
import "ocidl.idl";

interface IULServer;
interface IULProvider;
interface IULSession;

[
    object,
    uuid(8E82AE00-D1A3-11D2-9374-00C04F72DAF7),
    pointer_default(unique)
]
interface IULSession : IUnknown
{
    [propget] HRESULT Client       ( [out] BSTR     *pVal   );
    [propget] HRESULT Command      ( [out] DWORD    *pVal   );
								   
    [propget] HRESULT ProviderID   ( [out] BSTR     *pVal   );
    [propget] HRESULT Username     ( [out] BSTR     *pVal   );
								   
    [propget] HRESULT JobID        ( [out] BSTR     *pVal   );
    [propget] HRESULT SizeAvailable( [out] DWORD    *pVal   );
    [propget] HRESULT SizeTotal    ( [out] DWORD    *pVal   );
    [propget] HRESULT SizeOriginal ( [out] DWORD    *pVal   );
								   
    [propget] HRESULT Data         ( [out] IStream* *pStm   );
								   
    [propget] HRESULT ProviderData ( [out] DWORD    *pVal   );
    [propput] HRESULT ProviderData ( [in]  DWORD     newVal );
};

[
    object,
    uuid(8E82AE01-D1A3-11D2-9374-00C04F72DAF7),
    pointer_default(unique)
]
interface IULProvider : IUnknown
{
    HRESULT ValidateClient  ( [in] IULServer* server, [in] IULSession* job );
    HRESULT DataAvailable   ( [in] IULServer* server, [in] IULSession* job );
    HRESULT TransferComplete( [in] IULServer* server, [in] IULSession* job );
};

[
    object,
    uuid(8E82AE02-D1A3-11D2-9374-00C04F72DAF7),
    pointer_default(unique)
]
interface IULServer : IUnknown
{
    HRESULT GetRequestVariable( [in] BSTR bstrName, [out] BSTR *pbstrVal );

    HRESULT AbortTransfer   (                    );
    HRESULT CompleteTransfer( [in] IStream* data );
};
