Hans Leidekker : netprofm: Add a stub implementation of INetworkCostManager.

Alexandre Julliard julliard at winehq.org
Tue Apr 15 14:50:33 CDT 2014


Module: wine
Branch: master
Commit: c7690c70bab5f2a34bf30dd66821206811ba6af0
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=c7690c70bab5f2a34bf30dd66821206811ba6af0

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Tue Apr 15 13:34:24 2014 +0200

netprofm: Add a stub implementation of INetworkCostManager.

---

 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,




More information about the wine-cvs mailing list