[2/5] netprofm: Add a stub implementation of INetworkListManager.

Hans Leidekker hans at codeweavers.com
Mon Apr 7 07:57:34 CDT 2014


---
 dlls/netprofm/Makefile.in        |   1 +
 dlls/netprofm/list.c             | 230 +++++++++++++++++++++++++++++++++++++++
 dlls/netprofm/netprofm_private.h |  19 ++++
 include/Makefile.in              |   1 +
 include/netlistmgr.idl           |  85 +++++++++++++++
 5 files changed, 336 insertions(+)
 create mode 100644 dlls/netprofm/list.c
 create mode 100644 dlls/netprofm/netprofm_private.h
 create mode 100644 include/netlistmgr.idl

diff --git a/dlls/netprofm/Makefile.in b/dlls/netprofm/Makefile.in
index 0368b86..133b82a 100644
--- a/dlls/netprofm/Makefile.in
+++ b/dlls/netprofm/Makefile.in
@@ -1,4 +1,5 @@
 MODULE    = netprofm.dll
 
 C_SRCS = \
+	list.c \
 	main.c
diff --git a/dlls/netprofm/list.c b/dlls/netprofm/list.c
new file mode 100644
index 0000000..3ea70c4
--- /dev/null
+++ b/dlls/netprofm/list.c
@@ -0,0 +1,230 @@
+/*
+ * Copyright 2014 Hans Leidekker for CodeWeavers
+ *
+ * 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
+ */
+
+#include "config.h"
+#include <stdarg.h>
+#include "windef.h"
+#include "winbase.h"
+#define COBJMACROS
+#include "initguid.h"
+#include "objbase.h"
+#include "netlistmgr.h"
+
+#include "wine/debug.h"
+#include "netprofm_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(netprofm);
+
+struct list_manager
+{
+    const INetworkListManagerVtbl *vtbl;
+    LONG                           refs;
+};
+
+static inline struct list_manager *impl_from_INetworkListManager(
+    INetworkListManager *iface )
+{
+    return (struct list_manager *)((char *)iface - FIELD_OFFSET( struct list_manager, vtbl ));
+}
+
+static ULONG WINAPI list_manager_AddRef(
+    INetworkListManager *iface )
+{
+    struct list_manager *mgr = impl_from_INetworkListManager( iface );
+    return InterlockedIncrement( &mgr->refs );
+}
+
+static ULONG WINAPI list_manager_Release(
+    INetworkListManager *iface )
+{
+    struct list_manager *mgr = impl_from_INetworkListManager( iface );
+    LONG refs = InterlockedDecrement( &mgr->refs );
+    if (!refs)
+    {
+        TRACE( "destroying %p\n", mgr );
+        HeapFree( GetProcessHeap(), 0, mgr );
+    }
+    return refs;
+}
+
+static HRESULT WINAPI list_manager_QueryInterface(
+    INetworkListManager *iface,
+    REFIID riid,
+    void **obj )
+{
+    struct list_manager *mgr = impl_from_INetworkListManager( iface );
+
+    TRACE( "%p, %s, %p\n", mgr, debugstr_guid(riid), obj );
+
+    if (IsEqualGUID( riid, &IID_INetworkListManager ) ||
+        IsEqualGUID( riid, &IID_IUnknown ))
+    {
+        *obj = iface;
+    }
+    else
+    {
+        FIXME( "interface %s not implemented\n", debugstr_guid(riid) );
+        return E_NOINTERFACE;
+    }
+    INetworkListManager_AddRef( iface );
+    return S_OK;
+}
+
+static HRESULT WINAPI list_manager_GetTypeInfoCount(
+    INetworkListManager *iface,
+    UINT *count )
+{
+    FIXME("\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI list_manager_GetTypeInfo(
+    INetworkListManager *iface,
+    UINT index,
+    LCID lcid,
+    ITypeInfo **info )
+{
+    FIXME("\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI list_manager_GetIDsOfNames(
+    INetworkListManager *iface,
+    REFIID riid,
+    LPOLESTR *names,
+    UINT count,
+    LCID lcid,
+    DISPID *dispid )
+{
+    FIXME("\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI list_manager_Invoke(
+    INetworkListManager *iface,
+    DISPID member,
+    REFIID riid,
+    LCID lcid,
+    WORD flags,
+    DISPPARAMS *params,
+    VARIANT *result,
+    EXCEPINFO *excep_info,
+    UINT *arg_err )
+{
+    FIXME("\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI list_manager_GetNetworks(
+    INetworkListManager *iface,
+    NLM_ENUM_NETWORK Flags,
+    IEnumNetworks **ppEnumNetwork )
+{
+    FIXME( "%p, %x, %p\n", iface, Flags, ppEnumNetwork );
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI list_manager_GetNetwork(
+    INetworkListManager *iface,
+    GUID gdNetworkId,
+    INetwork **ppNetwork )
+{
+    FIXME( "%p, %s, %p\n", iface, debugstr_guid(&gdNetworkId), ppNetwork );
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI list_manager_GetNetworkConnections(
+    INetworkListManager *iface,
+    IEnumNetworkConnections **ppEnum )
+{
+    FIXME( "%p, %p\n", iface, ppEnum );
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI list_manager_GetNetworkConnection(
+    INetworkListManager *iface,
+    GUID gdNetworkConnectionId,
+    INetworkConnection **ppNetworkConnection )
+{
+    FIXME( "%p, %s, %p\n", iface, debugstr_guid(&gdNetworkConnectionId),
+            ppNetworkConnection );
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI list_manager_IsConnectedToInternet(
+    INetworkListManager *iface,
+    VARIANT_BOOL *pbIsConnected )
+{
+    FIXME( "%p, %p\n", iface, pbIsConnected );
+
+    *pbIsConnected = VARIANT_TRUE;
+    return S_OK;
+}
+
+static HRESULT WINAPI list_manager_IsConnected(
+    INetworkListManager *iface,
+    VARIANT_BOOL *pbIsConnected )
+{
+    FIXME( "%p, %p\n", iface, pbIsConnected );
+
+    *pbIsConnected = VARIANT_TRUE;
+    return S_OK;
+}
+
+static HRESULT WINAPI list_manager_GetConnectivity(
+    INetworkListManager *iface,
+    NLM_CONNECTIVITY *pConnectivity )
+{
+    FIXME( "%p, %p\n", iface, pConnectivity );
+
+    *pConnectivity = NLM_CONNECTIVITY_IPV4_INTERNET;
+    return S_OK;
+}
+
+static const INetworkListManagerVtbl list_manager_vtbl =
+{
+    list_manager_QueryInterface,
+    list_manager_AddRef,
+    list_manager_Release,
+    list_manager_GetTypeInfoCount,
+    list_manager_GetTypeInfo,
+    list_manager_GetIDsOfNames,
+    list_manager_Invoke,
+    list_manager_GetNetworks,
+    list_manager_GetNetwork,
+    list_manager_GetNetworkConnections,
+    list_manager_GetNetworkConnection,
+    list_manager_IsConnectedToInternet,
+    list_manager_IsConnected,
+    list_manager_GetConnectivity
+};
+
+HRESULT list_manager_create( void **obj )
+{
+    struct list_manager *mgr;
+
+    TRACE( "%p\n", obj );
+
+    if (!(mgr = HeapAlloc( GetProcessHeap(), 0, sizeof(*mgr) ))) return E_OUTOFMEMORY;
+    mgr->vtbl = &list_manager_vtbl;
+    mgr->refs = 1;
+
+    *obj = &mgr->vtbl;
+    TRACE( "returning iface %p\n", *obj );
+    return S_OK;
+}
diff --git a/dlls/netprofm/netprofm_private.h b/dlls/netprofm/netprofm_private.h
new file mode 100644
index 0000000..5e863c4
--- /dev/null
+++ b/dlls/netprofm/netprofm_private.h
@@ -0,0 +1,19 @@
+/*
+ * Copyright 2014 Hans Leidekker for CodeWeavers
+ *
+ * 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
+ */
+
+HRESULT list_manager_create(void **) DECLSPEC_HIDDEN;
diff --git a/include/Makefile.in b/include/Makefile.in
index 5c6a1c6..a47e26e 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -79,6 +79,7 @@ PUBLIC_IDL_H_SRCS = \
 	netcfgx.idl \
 	netcon.idl \
 	netfw.idl \
+	netlistmgr.idl \
 	oaidl.idl \
 	objectarray.idl \
 	objidl.idl \
diff --git a/include/netlistmgr.idl b/include/netlistmgr.idl
new file mode 100644
index 0000000..51393b9
--- /dev/null
+++ b/include/netlistmgr.idl
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2014 Hans Leidekker for CodeWeavers
+ *
+ * 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
+ */
+
+import "oaidl.idl";
+import "objidl.idl";
+
+interface IEnumNetworks;
+interface IEnumNetworkConnections;
+interface INetwork;
+interface INetworkConnection;
+interface INetworkListManager;
+
+typedef [v1_enum] enum NLM_CONNECTIVITY
+{
+    NLM_CONNECTIVITY_DISCONNECTED      = 0x0000,
+    NLM_CONNECTIVITY_IPV4_NOTRAFFIC    = 0x0001,
+    NLM_CONNECTIVITY_IPV6_NOTRAFFIC    = 0x0002,
+    NLM_CONNECTIVITY_IPV4_SUBNET       = 0x0010,
+    NLM_CONNECTIVITY_IPV4_LOCALNETWORK = 0x0020,
+    NLM_CONNECTIVITY_IPV4_INTERNET     = 0x0040,
+    NLM_CONNECTIVITY_IPV6_SUBNET       = 0x0100,
+    NLM_CONNECTIVITY_IPV6_LOCALNETWORK = 0x0200,
+    NLM_CONNECTIVITY_IPV6_INTERNET     = 0x0400
+} NLM_CONNECTIVITY;
+
+typedef [v1_enum] enum NLM_ENUM_NETWORK
+{
+    NLM_ENUM_NETWORK_CONNECTED    = 0x01,
+    NLM_ENUM_NETWORK_DISCONNECTED = 0x02,
+    NLM_ENUM_NETWORK_ALL          = 0x03
+} NLM_ENUM_NETWORK;
+
+[
+    dual,
+    object,
+    oleautomation,
+    pointer_default(unique),
+    uuid(dcb00000-570f-4a9b-8d69-199fdba5723b)
+]
+interface INetworkListManager : IDispatch
+{
+    HRESULT GetNetworks(
+        [in] NLM_ENUM_NETWORK Flags,
+        [out, retval] IEnumNetworks **ppEnumNetwork);
+
+    HRESULT GetNetwork(
+        [in] GUID gdNetworkId,
+        [out, retval] INetwork **ppNetwork);
+
+    HRESULT GetNetworkConnections(
+        [out, retval] IEnumNetworkConnections **ppEnum);
+
+    HRESULT GetNetworkConnection(
+        [in] GUID gdNetworkConnectionId,
+        [out, retval] INetworkConnection **ppNetworkConnection);
+
+    HRESULT IsConnectedToInternet(
+        [out, retval] VARIANT_BOOL *pbIsConnected);
+
+    HRESULT IsConnected(
+        [out, retval] VARIANT_BOOL *pbIsConnected);
+
+    HRESULT GetConnectivity(
+        [out, retval] NLM_CONNECTIVITY *pConnectivity);
+}
+
+[
+    uuid(dcb00c01-570f-4a9b-8d69-199fdba5723b)
+]
+coclass NetworkListManager { interface INetworkListManager; }
-- 
1.9.1





More information about the wine-patches mailing list