[2/2] netprofm: Add a stub implementation of INetworkCostManager.
Hans Leidekker
hans at codeweavers.com
Tue Apr 15 06:34:24 CDT 2014
---
dlls/netprofm/list.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++
dlls/netprofm/tests/list.c | 18 ++++++++++++
include/netlistmgr.idl | 57 ++++++++++++++++++++++++++++++++++++
3 files changed, 147 insertions(+)
diff --git a/dlls/netprofm/list.c b/dlls/netprofm/list.c
index 7c0b9e1..d5940f4 100644
--- a/dlls/netprofm/list.c
+++ b/dlls/netprofm/list.c
@@ -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;
diff --git a/dlls/netprofm/tests/list.c b/dlls/netprofm/tests/list.c
index 9ac427e..453856f 100644
--- a/dlls/netprofm/tests/list.c
+++ b/dlls/netprofm/tests/list.c
@@ -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 );
}
diff --git a/include/netlistmgr.idl b/include/netlistmgr.idl
index 6adca14..5be6e28 100644
--- a/include/netlistmgr.idl
+++ b/include/netlistmgr.idl
@@ -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,
--
1.9.2
More information about the wine-patches
mailing list