blob: d963efd6ef4b92c38798be37f138db365fb1e624 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
/*
* Copyright 2015 The WebRTC Project Authors. All rights reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#include "rtc_base/ifaddrs_converter.h"
namespace rtc {
IfAddrsConverter::IfAddrsConverter() {}
IfAddrsConverter::~IfAddrsConverter() {}
bool IfAddrsConverter::ConvertIfAddrsToIPAddress(
const struct ifaddrs* interface,
InterfaceAddress* ip,
IPAddress* mask) {
switch (interface->ifa_addr->sa_family) {
case AF_INET: {
*ip = InterfaceAddress(IPAddress(
reinterpret_cast<sockaddr_in*>(interface->ifa_addr)->sin_addr));
*mask = IPAddress(
reinterpret_cast<sockaddr_in*>(interface->ifa_netmask)->sin_addr);
return true;
}
case AF_INET6: {
int ip_attributes = IPV6_ADDRESS_FLAG_NONE;
if (!ConvertNativeAttributesToIPAttributes(interface, &ip_attributes)) {
return false;
}
*ip = InterfaceAddress(
reinterpret_cast<sockaddr_in6*>(interface->ifa_addr)->sin6_addr,
ip_attributes);
*mask = IPAddress(
reinterpret_cast<sockaddr_in6*>(interface->ifa_netmask)->sin6_addr);
return true;
}
default: {
return false;
}
}
}
bool IfAddrsConverter::ConvertNativeAttributesToIPAttributes(
const struct ifaddrs* interface,
int* ip_attributes) {
*ip_attributes = IPV6_ADDRESS_FLAG_NONE;
return true;
}
#if !defined(WEBRTC_MAC)
// For MAC and IOS, it's defined in macifaddrs_converter.cc
IfAddrsConverter* CreateIfAddrsConverter() {
return new IfAddrsConverter();
}
#endif
} // namespace rtc
|