From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/netprofm/list.c | 51 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 3 deletions(-)
diff --git a/dlls/netprofm/list.c b/dlls/netprofm/list.c index 254cf60c263..de6f6869e3e 100644 --- a/dlls/netprofm/list.c +++ b/dlls/netprofm/list.c @@ -50,6 +50,8 @@ struct network GUID id; VARIANT_BOOL connected_to_internet; VARIANT_BOOL connected; + BOOLEAN ipv4; + BOOLEAN ipv6; };
struct connection @@ -62,6 +64,8 @@ struct connection INetwork *network; VARIANT_BOOL connected_to_internet; VARIANT_BOOL connected; + BOOLEAN ipv4; + BOOLEAN ipv6; };
struct connection_point @@ -480,9 +484,16 @@ static HRESULT WINAPI network_GetConnectivity( INetwork *iface, NLM_CONNECTIVITY *pConnectivity ) { + struct network *network = impl_from_INetwork( iface ); + FIXME( "%p, %p\n", iface, pConnectivity );
- *pConnectivity = NLM_CONNECTIVITY_IPV4_INTERNET; + *pConnectivity = NLM_CONNECTIVITY_DISCONNECTED; + if (network->ipv4) + *pConnectivity |= NLM_CONNECTIVITY_IPV4_INTERNET; + if (network->ipv6) + *pConnectivity |= NLM_CONNECTIVITY_IPV6_INTERNET; + return S_OK; }
@@ -1330,9 +1341,19 @@ static HRESULT WINAPI list_manager_GetConnectivity( INetworkListManager *iface, NLM_CONNECTIVITY *pConnectivity ) { + struct list_manager *mgr = impl_from_INetworkListManager( iface ); + struct network *network; + FIXME( "%p, %p\n", iface, pConnectivity );
- *pConnectivity = NLM_CONNECTIVITY_IPV4_INTERNET; + *pConnectivity = NLM_CONNECTIVITY_DISCONNECTED; + + LIST_FOR_EACH_ENTRY( network, &mgr->networks, struct network, entry ) + { + if (network->ipv4) *pConnectivity |= NLM_CONNECTIVITY_IPV4_INTERNET; + if (network->ipv6) *pConnectivity |= NLM_CONNECTIVITY_IPV6_INTERNET; + } + return S_OK; }
@@ -1565,9 +1586,16 @@ static HRESULT WINAPI connection_GetConnectivity( INetworkConnection *iface, NLM_CONNECTIVITY *pConnectivity ) { + struct connection *connection = impl_from_INetworkConnection( iface ); + FIXME( "%p, %p\n", iface, pConnectivity );
- *pConnectivity = NLM_CONNECTIVITY_IPV4_INTERNET; + *pConnectivity = NLM_CONNECTIVITY_DISCONNECTED; + if (connection->ipv4) + *pConnectivity |= NLM_CONNECTIVITY_IPV4_INTERNET; + if (connection->ipv6) + *pConnectivity |= NLM_CONNECTIVITY_IPV6_INTERNET; + return S_OK; }
@@ -1761,6 +1789,23 @@ static void init_networks( struct list_manager *mgr ) network->connected_to_internet = VARIANT_TRUE; connection->connected_to_internet = VARIANT_TRUE; } + if (aa->u1.Flags & IP_ADAPTER_IPV6_ENABLED) + { + network->ipv6 = TRUE; + connection->ipv6 = TRUE; + network->ipv4 = FALSE; + connection->ipv4 = FALSE; + if (aa->u1.Flags & IP_ADAPTER_IPV4_ENABLED) + { + network->ipv4 = TRUE; + connection->ipv4 = TRUE; + } + } + else + { + network->ipv4 = TRUE; + connection->ipv4 = TRUE; + }
connection->network = &network->INetwork_iface; INetwork_AddRef( connection->network );