| Index: content/renderer/p2p/ipc_network_manager.cc
|
| ===================================================================
|
| --- content/renderer/p2p/ipc_network_manager.cc (revision 233097)
|
| +++ content/renderer/p2p/ipc_network_manager.cc (working copy)
|
| @@ -46,18 +46,32 @@
|
| if (!network_list_received_)
|
| network_list_received_ = true;
|
|
|
| + // Note: 32 and 64 are the arbitrary(kind of) prefix length used to
|
| + // differentiate IPv4 and IPv6 addresses.
|
| + // talk_base::Network uses these prefix_length to compare network
|
| + // interfaces discovered.
|
| std::vector<talk_base::Network*> networks;
|
| for (net::NetworkInterfaceList::const_iterator it = list.begin();
|
| it != list.end(); it++) {
|
| - uint32 address;
|
| - if (it->address.size() != net::kIPv4AddressSize)
|
| - continue;
|
| - memcpy(&address, &it->address[0], sizeof(uint32));
|
| - address = talk_base::NetworkToHost32(address);
|
| - talk_base::Network* network = new talk_base::Network(
|
| - it->name, it->name, talk_base::IPAddress(address), 32);
|
| - network->AddIP(talk_base::IPAddress(address));
|
| - networks.push_back(network);
|
| + if (it->address.size() == net::kIPv4AddressSize) {
|
| + uint32 address;
|
| + memcpy(&address, &it->address[0], sizeof(uint32));
|
| + address = talk_base::NetworkToHost32(address);
|
| + talk_base::Network* network = new talk_base::Network(
|
| + it->name, it->name, talk_base::IPAddress(address), 32);
|
| + network->AddIP(talk_base::IPAddress(address));
|
| + networks.push_back(network);
|
| + } else if (it->address.size() == net::kIPv6AddressSize) {
|
| + in6_addr address;
|
| + memcpy(&address, &it->address[0], sizeof(in6_addr));
|
| + talk_base::IPAddress ip6_addr(address);
|
| + if (!talk_base::IPIsPrivate(ip6_addr)) {
|
| + talk_base::Network* network = new talk_base::Network(
|
| + it->name, it->name, ip6_addr, 64);
|
| + network->AddIP(ip6_addr);
|
| + networks.push_back(network);
|
| + }
|
| + }
|
| }
|
|
|
| bool changed = false;
|
|
|