1 /**************************************************************************** 2 ** 3 ** Copyright (C) 2015 The Qt Company Ltd. 4 ** Contact: http://www.qt.io/licensing/ 5 ** 6 ** This file is part of the QtNetwork module of the Qt Toolkit. 7 ** 8 ** $QT_BEGIN_LICENSE:LGPL$ 9 ** Commercial License Usage 10 ** Licensees holding valid commercial Qt licenses may use this file in 11 ** accordance with the commercial license agreement provided with the 12 ** Software or, alternatively, in accordance with the terms contained in 13 ** a written agreement between you and The Qt Company. For licensing terms 14 ** and conditions see http://www.qt.io/terms-conditions. For further 15 ** information use the contact form at http://www.qt.io/contact-us. 16 ** 17 ** GNU Lesser General Public License Usage 18 ** Alternatively, this file may be used under the terms of the GNU Lesser 19 ** General Public License version 2.1 or version 3 as published by the Free 20 ** Software Foundation and appearing in the file LICENSE.LGPLv21 and 21 ** LICENSE.LGPLv3 included in the packaging of this file. Please review the 22 ** following information to ensure the GNU Lesser General Public License 23 ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and 24 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. 25 ** 26 ** As a special exception, The Qt Company gives you certain additional 27 ** rights. These rights are described in The Qt Company LGPL Exception 28 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. 29 ** 30 ** GNU General Public License Usage 31 ** Alternatively, this file may be used under the terms of the GNU 32 ** General Public License version 3.0 as published by the Free Software 33 ** Foundation and appearing in the file LICENSE.GPL included in the 34 ** packaging of this file. Please review the following information to 35 ** ensure the GNU General Public License version 3.0 requirements will be 36 ** met: http://www.gnu.org/copyleft/gpl.html. 37 ** 38 ** $QT_END_LICENSE$ 39 ** 40 ****************************************************************************/ 41 42 #ifndef QNETWORKINTERFACE_WIN_P_H 43 #define QNETWORKINTERFACE_WIN_P_H 44 45 // 46 // W A R N I N G 47 // ------------- 48 // 49 // This file is not part of the Qt API. It exists for the convenience 50 // of the QLibrary class. This header file may change from 51 // version to version without notice, or even be removed. 52 // 53 // We mean it. 54 // 55 56 #include <winsock2.h> 57 #include <qt_windows.h> 58 #include <time.h> 59 60 QT_BEGIN_NAMESPACE 61 62 #ifndef GAA_FLAG_INCLUDE_ALL_INTERFACES 63 # define GAA_FLAG_INCLUDE_ALL_INTERFACES 0x0100 64 #endif 65 #ifndef MAX_ADAPTER_ADDRESS_LENGTH 66 // definitions from iptypes.h 67 # define MAX_ADAPTER_DESCRIPTION_LENGTH 128 // arb. 68 # define MAX_ADAPTER_NAME_LENGTH 256 // arb. 69 # define MAX_ADAPTER_ADDRESS_LENGTH 8 // arb. 70 # define DEFAULT_MINIMUM_ENTITIES 32 // arb. 71 # define MAX_HOSTNAME_LEN 128 // arb. 72 # define MAX_DOMAIN_NAME_LEN 128 // arb. 73 # define MAX_SCOPE_ID_LEN 256 // arb. 74 75 # define GAA_FLAG_SKIP_UNICAST 0x0001 76 # define GAA_FLAG_SKIP_ANYCAST 0x0002 77 # define GAA_FLAG_SKIP_MULTICAST 0x0004 78 # define GAA_FLAG_SKIP_DNS_SERVER 0x0008 79 # define GAA_FLAG_INCLUDE_PREFIX 0x0010 80 # define GAA_FLAG_SKIP_FRIENDLY_NAME 0x0020 81 82 # define IP_ADAPTER_DDNS_ENABLED 0x01 83 # define IP_ADAPTER_REGISTER_ADAPTER_SUFFIX 0x02 84 # define IP_ADAPTER_DHCP_ENABLED 0x04 85 # define IP_ADAPTER_RECEIVE_ONLY 0x08 86 # define IP_ADAPTER_NO_MULTICAST 0x10 87 # define IP_ADAPTER_IPV6_OTHER_STATEFUL_CONFIG 0x20 88 89 # define MIB_IF_TYPE_OTHER 1 90 # define MIB_IF_TYPE_ETHERNET 6 91 # define MIB_IF_TYPE_TOKENRING 9 92 # define MIB_IF_TYPE_FDDI 15 93 # define MIB_IF_TYPE_PPP 23 94 # define MIB_IF_TYPE_LOOPBACK 24 95 # define MIB_IF_TYPE_SLIP 28 96 97 #endif 98 // copied from qnativesocketengine_win.cpp 99 struct qt_in6_addr { 100 u_char qt_s6_addr[16]; 101 }; 102 typedef struct { 103 short sin6_family; /* AF_INET6 */ 104 u_short sin6_port; /* Transport level port number */ 105 u_long sin6_flowinfo; /* IPv6 flow information */ 106 struct qt_in6_addr sin6_addr; /* IPv6 address */ 107 u_long sin6_scope_id; /* set of interfaces for a scope */ 108 } qt_sockaddr_in6; 109 110 // copied from MSDN online help 111 typedef enum { 112 IpPrefixOriginOther = 0, 113 IpPrefixOriginManual, 114 IpPrefixOriginWellKnown, 115 IpPrefixOriginDhcp, 116 IpPrefixOriginRouterAdvertisement 117 } IP_PREFIX_ORIGIN; 118 119 typedef enum { 120 IpSuffixOriginOther = 0, 121 IpSuffixOriginManual, 122 IpSuffixOriginWellKnown, 123 IpSuffixOriginDhcp, 124 IpSuffixOriginLinkLayerAddress, 125 IpSuffixOriginRandom 126 } IP_SUFFIX_ORIGIN; 127 128 typedef enum { 129 IpDadStateInvalid = 0, 130 IpDadStateTentative, 131 IpDadStateDuplicate, 132 IpDadStateDeprecated, 133 IpDadStatePreferred, 134 } IP_DAD_STATE; 135 136 typedef enum { 137 IfOperStatusUp = 1, 138 IfOperStatusDown, 139 IfOperStatusTesting, 140 IfOperStatusUnknown, 141 IfOperStatusDormant, 142 IfOperStatusNotPresent, 143 IfOperStatusLowerLayerDown 144 } IF_OPER_STATUS; 145 146 typedef struct _IP_ADAPTER_UNICAST_ADDRESS { 147 union { 148 ULONGLONG Alignment; 149 struct { 150 ULONG Length; 151 DWORD Flags; 152 }; 153 }; 154 struct _IP_ADAPTER_UNICAST_ADDRESS* Next; 155 SOCKET_ADDRESS Address; 156 IP_PREFIX_ORIGIN PrefixOrigin; 157 IP_SUFFIX_ORIGIN SuffixOrigin; 158 IP_DAD_STATE DadState; 159 ULONG ValidLifetime; 160 ULONG PreferredLifetime; 161 ULONG LeaseLifetime; 162 } IP_ADAPTER_UNICAST_ADDRESS, *PIP_ADAPTER_UNICAST_ADDRESS; 163 164 typedef struct _IP_ADAPTER_ANYCAST_ADDRESS 165 IP_ADAPTER_ANYCAST_ADDRESS, *PIP_ADAPTER_ANYCAST_ADDRESS; 166 167 typedef struct _IP_ADAPTER_MULTICAST_ADDRESS 168 IP_ADAPTER_MULTICAST_ADDRESS, 169 *PIP_ADAPTER_MULTICAST_ADDRESS; 170 171 typedef struct _IP_ADAPTER_DNS_SERVER_ADDRESS 172 IP_ADAPTER_DNS_SERVER_ADDRESS, 173 *PIP_ADAPTER_DNS_SERVER_ADDRESS; 174 175 typedef struct _IP_ADAPTER_PREFIX { 176 union { 177 ULONGLONG Alignment; 178 struct { 179 ULONG Length; 180 DWORD Flags; 181 }; 182 }; 183 struct _IP_ADAPTER_PREFIX* Next; 184 SOCKET_ADDRESS Address; 185 ULONG PrefixLength; 186 } IP_ADAPTER_PREFIX, 187 *PIP_ADAPTER_PREFIX; 188 189 typedef struct _IP_ADAPTER_ADDRESSES { 190 union { 191 ULONGLONG Alignment; 192 struct { 193 ULONG Length; 194 DWORD IfIndex; 195 }; 196 }; 197 struct _IP_ADAPTER_ADDRESSES* Next; 198 PCHAR AdapterName; 199 PIP_ADAPTER_UNICAST_ADDRESS FirstUnicastAddress; 200 PIP_ADAPTER_ANYCAST_ADDRESS FirstAnycastAddress; 201 PIP_ADAPTER_MULTICAST_ADDRESS FirstMulticastAddress; 202 PIP_ADAPTER_DNS_SERVER_ADDRESS FirstDnsServerAddress; 203 PWCHAR DnsSuffix; 204 PWCHAR Description; 205 PWCHAR FriendlyName; 206 BYTE PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH]; 207 DWORD PhysicalAddressLength; 208 DWORD Flags; 209 DWORD Mtu; 210 DWORD IfType; 211 IF_OPER_STATUS OperStatus; 212 DWORD Ipv6IfIndex; 213 DWORD ZoneIndices[16]; 214 PIP_ADAPTER_PREFIX FirstPrefix; 215 } IP_ADAPTER_ADDRESSES, 216 *PIP_ADAPTER_ADDRESSES; 217 218 typedef struct { 219 char String[4 * 4]; 220 } IP_ADDRESS_STRING, *PIP_ADDRESS_STRING, IP_MASK_STRING, *PIP_MASK_STRING; 221 222 typedef struct _IP_ADDR_STRING { 223 struct _IP_ADDR_STRING* Next; 224 IP_ADDRESS_STRING IpAddress; 225 IP_MASK_STRING IpMask; 226 DWORD Context; 227 } IP_ADDR_STRING, 228 *PIP_ADDR_STRING; 229 230 typedef struct _IP_ADAPTER_INFO { 231 struct _IP_ADAPTER_INFO* Next; 232 DWORD ComboIndex; 233 char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4]; 234 char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]; 235 UINT AddressLength; 236 BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH]; 237 DWORD Index; 238 UINT Type; 239 UINT DhcpEnabled; 240 PIP_ADDR_STRING CurrentIpAddress; 241 IP_ADDR_STRING IpAddressList; 242 IP_ADDR_STRING GatewayList; 243 IP_ADDR_STRING DhcpServer; 244 BOOL HaveWins; 245 IP_ADDR_STRING PrimaryWinsServer; 246 IP_ADDR_STRING SecondaryWinsServer; 247 time_t LeaseObtained; 248 time_t LeaseExpires; 249 } IP_ADAPTER_INFO, 250 *PIP_ADAPTER_INFO; 251 252 typedef struct { 253 char HostName[MAX_HOSTNAME_LEN + 4]; 254 char DomainName[MAX_DOMAIN_NAME_LEN + 4]; 255 PIP_ADDR_STRING CurrentDnsServer; 256 IP_ADDR_STRING DnsServerList; 257 UINT NodeType; 258 char ScopeId[MAX_SCOPE_ID_LEN + 4]; 259 UINT EnableRouting; 260 UINT EnableProxy; 261 UINT EnableDns; 262 } FIXED_INFO, *PFIXED_INFO; 263 264 QT_END_NAMESPACE 265 266 #endif 267