kodi
NetworkWin32.h
1 /*
2  * Copyright (C) 2005-2018 Team Kodi
3  * This file is part of Kodi - https://kodi.tv
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  * See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "network/Network.h"
12 #include "threads/CriticalSection.h"
13 #include "utils/stopwatch.h"
14 
15 #include <string>
16 #include <vector>
17 
18 #include <ws2ipdef.h> /* Microsoft can't write standalone headers */
19 #include <Iphlpapi.h> /* Microsoft can't write standalone headers */
20 
21 class CNetworkWin32;
22 
24 {
25 public:
26  CNetworkInterfaceWin32(const IP_ADAPTER_ADDRESSES& adapter);
27  ~CNetworkInterfaceWin32(void) override;
28 
29  bool IsEnabled(void) const override;
30  bool IsConnected(void) const override;
31 
32  std::string GetMacAddress(void) const override;
33  void GetMacAddressRaw(char rawMac[6]) const override;
34 
35  bool GetHostMacAddress(unsigned long host, std::string& mac) const override;
36  bool GetHostMacAddress(struct sockaddr* host, std::string& mac) const;
37 
38  std::string GetCurrentIPAddress() const override;
39  std::string GetCurrentNetmask() const override;
40  std::string GetCurrentDefaultGateway(void) const override;
41 
42 private:
43  IP_ADAPTER_ADDRESSES m_adapter;
44 };
45 
47 {
48 public:
49  CNetworkWin32();
50  ~CNetworkWin32(void) override;
51 
52  // Return the list of interfaces
53  virtual std::vector<CNetworkInterface*>& GetInterfaceList(void) override;
54 
55  // Ping remote host
56  using CNetworkBase::PingHost;
57  bool PingHost(unsigned long host, unsigned int timeout_ms = 2000) override;
58  bool PingHost(const struct sockaddr& host, unsigned int timeout_ms = 2000);
59 
60  // Get/set the nameserver(s)
61  std::vector<std::string> GetNameServers(void) override;
62 
63  friend class CNetworkInterfaceWin32;
64 
65 private:
66  int GetSocket() { return m_sock; }
67  void queryInterfaceList();
68  void CleanInterfaceList();
69  std::vector<CNetworkInterface*> m_interfaces;
70  int m_sock;
71  CStopWatch m_netrefreshTimer;
72  CCriticalSection m_critSection;
73  std::vector<uint8_t> m_adapterAddresses;
74 };
75 
Definition: Stopwatch.h:14
Definition: NetworkWin32.h:23
Definition: NetworkWin32.h:46
Definition: Network.h:18
Definition: Network.h:40