1 // Copyright (c) 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef NET_BASE_NETWORK_INTERFACES_WIN_H_
6 #define NET_BASE_NETWORK_INTERFACES_WIN_H_
8 // This file is only used to expose some of the internals
9 // of network_interfaces_win.cc to tests.
14 #include "base/win/scoped_handle.h"
15 #include "net/base/net_export.h"
16 #include "net/base/network_interfaces.h"
21 struct NET_EXPORT WlanApi
{
22 typedef DWORD (WINAPI
*WlanOpenHandleFunc
)(
23 DWORD
, VOID
*, DWORD
*, HANDLE
*);
24 typedef DWORD (WINAPI
*WlanEnumInterfacesFunc
)(
25 HANDLE
, VOID
*, WLAN_INTERFACE_INFO_LIST
**);
26 typedef DWORD (WINAPI
*WlanQueryInterfaceFunc
)(
27 HANDLE
, const GUID
*, WLAN_INTF_OPCODE
, VOID
*, DWORD
*, VOID
**,
28 WLAN_OPCODE_VALUE_TYPE
*);
29 typedef DWORD (WINAPI
*WlanSetInterfaceFunc
)(
30 HANDLE
, const GUID
*, WLAN_INTF_OPCODE
, DWORD
, const VOID
*, VOID
*);
31 typedef VOID (WINAPI
*WlanFreeMemoryFunc
)(VOID
*);
32 typedef DWORD (WINAPI
*WlanCloseHandleFunc
)(HANDLE
, VOID
*);
35 static WlanApi
& GetInstance();
38 DWORD
OpenHandle(DWORD client_version
, DWORD
* cur_version
, T
* handle
) const {
40 DWORD result
= open_handle_func(client_version
, NULL
, cur_version
,
42 if (result
!= ERROR_SUCCESS
)
44 handle
->Set(temp_handle
);
49 WlanOpenHandleFunc open_handle_func
;
50 WlanEnumInterfacesFunc enum_interfaces_func
;
51 WlanQueryInterfaceFunc query_interface_func
;
52 WlanSetInterfaceFunc set_interface_func
;
53 WlanFreeMemoryFunc free_memory_func
;
54 WlanCloseHandleFunc close_handle_func
;
58 struct WlanApiHandleTraits
{
59 typedef HANDLE Handle
;
61 static bool CloseHandle(HANDLE handle
) {
62 return WlanApi::GetInstance().close_handle_func(handle
, NULL
) ==
65 static bool IsHandleValid(HANDLE handle
) {
66 return base::win::HandleTraits::IsHandleValid(handle
);
68 static HANDLE
NullHandle() {
69 return base::win::HandleTraits::NullHandle();
73 typedef base::win::GenericScopedHandle
<
75 base::win::DummyVerifierTraits
> WlanHandle
;
77 struct WlanApiDeleter
{
78 inline void operator()(void* ptr
) const {
79 WlanApi::GetInstance().free_memory_func(ptr
);
83 NET_EXPORT
bool GetNetworkListImpl(
84 NetworkInterfaceList
* networks
,
87 const IP_ADAPTER_ADDRESSES
* ip_adapter_addresses
);
89 } // namespace internal
93 #endif // NET_BASE_NETWORK_INTERFACES_WIN_H_