netprofm: Add a stub implementation of INetworkCostManager.

This commit is contained in:
Hans Leidekker 2014-04-15 13:34:24 +02:00 committed by Alexandre Julliard
parent 06fd202a20
commit c7690c70ba
3 changed files with 147 additions and 0 deletions

View file

@ -33,9 +33,76 @@ WINE_DEFAULT_DEBUG_CHANNEL(netprofm);
struct list_manager
{
INetworkListManager INetworkListManager_iface;
INetworkCostManager INetworkCostManager_iface;
LONG refs;
};
static inline struct list_manager *impl_from_INetworkCostManager(
INetworkCostManager *iface )
{
return CONTAINING_RECORD( iface, struct list_manager, INetworkCostManager_iface );
}
static HRESULT WINAPI cost_manager_QueryInterface(
INetworkCostManager *iface,
REFIID riid,
void **obj )
{
struct list_manager *mgr = impl_from_INetworkCostManager( iface );
return INetworkListManager_QueryInterface( &mgr->INetworkListManager_iface, riid, obj );
}
static ULONG WINAPI cost_manager_AddRef(
INetworkCostManager *iface )
{
struct list_manager *mgr = impl_from_INetworkCostManager( iface );
return INetworkListManager_AddRef( &mgr->INetworkListManager_iface );
}
static ULONG WINAPI cost_manager_Release(
INetworkCostManager *iface )
{
struct list_manager *mgr = impl_from_INetworkCostManager( iface );
return INetworkListManager_Release( &mgr->INetworkListManager_iface );
}
static HRESULT WINAPI cost_manager_GetCost(
INetworkCostManager *iface, DWORD *pCost, NLM_SOCKADDR *pDestIPAddr)
{
FIXME( "%p, %p, %p\n", iface, pCost, pDestIPAddr );
if (!pCost) return E_POINTER;
*pCost = NLM_CONNECTION_COST_UNRESTRICTED;
return S_OK;
}
static HRESULT WINAPI cost_manager_GetDataPlanStatus(
INetworkCostManager *iface, NLM_DATAPLAN_STATUS *pDataPlanStatus,
NLM_SOCKADDR *pDestIPAddr)
{
FIXME( "%p, %p, %p\n", iface, pDataPlanStatus, pDestIPAddr );
return E_NOTIMPL;
}
static HRESULT WINAPI cost_manager_SetDestinationAddresses(
INetworkCostManager *iface, UINT32 length, NLM_SOCKADDR *pDestIPAddrList,
VARIANT_BOOL bAppend)
{
FIXME( "%p, %u, %p, %x\n", iface, length, pDestIPAddrList, bAppend );
return E_NOTIMPL;
}
static const INetworkCostManagerVtbl cost_manager_vtbl =
{
cost_manager_QueryInterface,
cost_manager_AddRef,
cost_manager_Release,
cost_manager_GetCost,
cost_manager_GetDataPlanStatus,
cost_manager_SetDestinationAddresses
};
static inline struct list_manager *impl_from_INetworkListManager(
INetworkListManager *iface )
{
@ -76,6 +143,10 @@ static HRESULT WINAPI list_manager_QueryInterface(
{
*obj = iface;
}
else if (IsEqualGUID( riid, &IID_INetworkCostManager ))
{
*obj = &mgr->INetworkCostManager_iface;
}
else
{
FIXME( "interface %s not implemented\n", debugstr_guid(riid) );
@ -222,6 +293,7 @@ HRESULT list_manager_create( void **obj )
if (!(mgr = HeapAlloc( GetProcessHeap(), 0, sizeof(*mgr) ))) return E_OUTOFMEMORY;
mgr->INetworkListManager_iface.lpVtbl = &list_manager_vtbl;
mgr->INetworkCostManager_iface.lpVtbl = &cost_manager_vtbl;
mgr->refs = 1;
*obj = &mgr->INetworkListManager_iface;

View file

@ -27,6 +27,7 @@
static void test_INetworkListManager( void )
{
INetworkListManager *mgr;
INetworkCostManager *cost_mgr;
NLM_CONNECTIVITY connectivity;
VARIANT_BOOL connected;
HRESULT hr;
@ -55,6 +56,23 @@ static void test_INetworkListManager( void )
ok( hr == S_OK, "got %08x\n", hr );
ok( connected == VARIANT_TRUE || connected == VARIANT_FALSE, "expected boolean value\n" );
INetworkListManager_QueryInterface( mgr, &IID_INetworkCostManager, (void **)&cost_mgr );
ok( hr == S_OK, "got %08x\n", hr );
if (hr == S_OK)
{
DWORD cost;
hr = INetworkCostManager_GetCost( cost_mgr, NULL, NULL );
ok( hr == E_POINTER, "got %08x\n", hr );
cost = 0xdeadbeef;
hr = INetworkCostManager_GetCost( cost_mgr, &cost, NULL );
ok( hr == S_OK, "got %08x\n", hr );
ok( cost != 0xdeadbeef, "cost not set\n" );
INetworkCostManager_Release( cost_mgr );
}
INetworkListManager_Release( mgr );
}

View file

@ -27,6 +27,7 @@ interface IEnumNetworks;
interface IEnumNetworkConnections;
interface INetwork;
interface INetworkConnection;
interface INetworkCostManager;
interface INetworkListManager;
typedef [v1_enum] enum NLM_CONNECTIVITY
@ -49,6 +50,62 @@ typedef [v1_enum] enum NLM_ENUM_NETWORK
NLM_ENUM_NETWORK_ALL = 0x03
} NLM_ENUM_NETWORK;
typedef [v1_enum] enum NLM_CONNECTION_COST
{
NLM_CONNECTION_COST_UNKNOWN = 0x0,
NLM_CONNECTION_COST_UNRESTRICTED = 0x1,
NLM_CONNECTION_COST_FIXED = 0x2,
NLM_CONNECTION_COST_VARIABLE = 0x4,
NLM_CONNECTION_COST_OVERDATALIMIT = 0x10000,
NLM_CONNECTION_COST_CONGESTED = 0x20000,
NLM_CONNECTION_COST_ROAMING = 0x40000,
NLM_CONNECTION_COST_APPROACHINGDATALIMIT = 0x80000
} NLM_CONNECTION_COST;
typedef struct NLM_SOCKADDR
{
BYTE data[128];
} NLM_SOCKADDR;
typedef struct NLM_USAGE_DATA
{
DWORD UsageInMegabytes;
FILETIME LastSyncTime;
} NLM_USAGE_DATA;
typedef struct NLM_DATAPLAN_STATUS
{
GUID InterfaceGuid;
NLM_USAGE_DATA UsageData;
DWORD DataLimitInMegabytes;
DWORD InboundBandwidthInKbps;
DWORD OutboundBandwidthInKbps;
FILETIME NextBillingCycle;
DWORD MaxTransferSizeInMegabytes;
DWORD Reserved;
} NLM_DATAPLAN_STATUS;
[
object,
pointer_default(unique),
uuid(dcb00008-570f-4a9b-8d69-199fdba5723b)
]
interface INetworkCostManager : IUnknown
{
HRESULT GetCost(
[out] DWORD *pCost,
[in, unique] NLM_SOCKADDR *pDestIPAddr);
HRESULT GetDataPlanStatus(
[out] NLM_DATAPLAN_STATUS *pDataPlanStatus,
[in, unique] NLM_SOCKADDR *pDestIPAddr);
HRESULT SetDestinationAddresses(
[in] UINT32 length,
[in, unique, size_is(length)] NLM_SOCKADDR *pDestIPAddrList,
[in] VARIANT_BOOL bAppend);
}
[
dual,
object,