/*
 * Background Intelligent Transfer Service (BITS) 5.0 interface
 *
 * Copyright 2020 Aaron Hill
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 *
 */

#ifndef DO_NO_IMPORTS
import "bits.idl";
import "bits1_5.idl";
import "bits2_0.idl";
import "bits2_5.idl";
import "bits3_0.idl";
#endif

cpp_quote("#define BITS_COST_STATE_TRANSFER_ALWAYS 0x800000ff")

[
    uuid(e847030c-bbba-4657-af6d-484aa42bf1fe),
    odl
]
interface IBackgroundCopyJob5: IBackgroundCopyJob4
{
    typedef enum {
        BITS_JOB_PROPERTY_ID_COST_FLAGS = 1,
        BITS_JOB_PROPERTY_NOTIFICATION_CLSID = 2,
        BITS_JOB_PROPERTY_DYNAMIC_CONTENT = 3,
        BITS_JOB_PROPERTY_HIGH_PERFORMANCE = 4,
        BITS_JOB_PROPERTY_MAX_DOWNLOAD_SIZE = 5,
        BITS_JOB_PROPERTY_USE_STORED_CREDENTIALS = 7,
        BITS_JOB_PROPERTY_MINIMUM_NOTIFICATION_INTERVAL_MS = 9,
        BITS_JOB_PROPERTY_ON_DEMAND_MODE = 10,
    } BITS_JOB_PROPERTY_ID;

    typedef union _BITS_JOB_PROPERTY_VALUE {
        DWORD Dword;
        GUID ClsID;
        BOOL Enable;
        UINT64 Uint64;
        BG_AUTH_TARGET Target;
    } BITS_JOB_PROPERTY_VALUE;

    HRESULT SetProperty(BITS_JOB_PROPERTY_ID id, BITS_JOB_PROPERTY_VALUE value);
    HRESULT GetProperty(BITS_JOB_PROPERTY_ID id, [out, ref] BITS_JOB_PROPERTY_VALUE *value);
}
