15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/private/net_address_private.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_bool.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/module.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/module_impl.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/var.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace pp { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> const char* interface_name<PPB_NetAddress_Private_1_1>() { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PPB_NETADDRESS_PRIVATE_INTERFACE_1_1; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> const char* interface_name<PPB_NetAddress_Private_1_0>() { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PPB_NETADDRESS_PRIVATE_INTERFACE_1_0; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> const char* interface_name<PPB_NetAddress_Private_0_1>() { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PPB_NETADDRESS_PRIVATE_INTERFACE_0_1; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool NetAddressPrivate::IsAvailable() { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return has_interface<PPB_NetAddress_Private_1_1>() || 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) has_interface<PPB_NetAddress_Private_1_0>() || 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) has_interface<PPB_NetAddress_Private_0_1>(); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool NetAddressPrivate::AreEqual(const PP_NetAddress_Private& addr1, 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PP_NetAddress_Private& addr2) { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_interface<PPB_NetAddress_Private_1_1>()) { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return !!get_interface<PPB_NetAddress_Private_1_1>()->AreEqual(&addr1, 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &addr2); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_interface<PPB_NetAddress_Private_1_0>()) { 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return !!get_interface<PPB_NetAddress_Private_1_0>()->AreEqual(&addr1, 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &addr2); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_interface<PPB_NetAddress_Private_0_1>()) { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return !!get_interface<PPB_NetAddress_Private_0_1>()->AreEqual(&addr1, 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &addr2); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool NetAddressPrivate::AreHostsEqual(const PP_NetAddress_Private& addr1, 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PP_NetAddress_Private& addr2) { 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_interface<PPB_NetAddress_Private_1_1>()) { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return !!get_interface<PPB_NetAddress_Private_1_1>()->AreHostsEqual(&addr1, 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &addr2); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_interface<PPB_NetAddress_Private_1_0>()) { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return !!get_interface<PPB_NetAddress_Private_1_0>()->AreHostsEqual(&addr1, 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &addr2); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_interface<PPB_NetAddress_Private_0_1>()) { 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return !!get_interface<PPB_NetAddress_Private_0_1>()->AreHostsEqual(&addr1, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &addr2); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string NetAddressPrivate::Describe(const PP_NetAddress_Private& addr, 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool include_port) { 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Module* module = Module::Get(); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!module) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return std::string(); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Var result_pp_var = PP_MakeUndefined(); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_interface<PPB_NetAddress_Private_1_1>()) { 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result_pp_var = get_interface<PPB_NetAddress_Private_1_1>()->Describe( 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) module->pp_module(), 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &addr, 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_FromBool(include_port)); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (has_interface<PPB_NetAddress_Private_1_0>()) { 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result_pp_var = get_interface<PPB_NetAddress_Private_1_0>()->Describe( 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) module->pp_module(), 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &addr, 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_FromBool(include_port)); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (has_interface<PPB_NetAddress_Private_0_1>()) { 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result_pp_var = get_interface<PPB_NetAddress_Private_0_1>()->Describe( 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) module->pp_module(), 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &addr, 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_FromBool(include_port)); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Var result(PASS_REF, result_pp_var); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return result.is_string() ? result.AsString() : std::string(); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool NetAddressPrivate::ReplacePort(const PP_NetAddress_Private& addr_in, 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint16_t port, 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_NetAddress_Private* addr_out) { 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_interface<PPB_NetAddress_Private_1_1>()) { 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return !!get_interface<PPB_NetAddress_Private_1_1>()->ReplacePort(&addr_in, 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) port, 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) addr_out); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_interface<PPB_NetAddress_Private_1_0>()) { 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return !!get_interface<PPB_NetAddress_Private_1_0>()->ReplacePort(&addr_in, 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) port, 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) addr_out); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_interface<PPB_NetAddress_Private_0_1>()) { 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return !!get_interface<PPB_NetAddress_Private_0_1>()->ReplacePort(&addr_in, 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) port, 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) addr_out); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool NetAddressPrivate::GetAnyAddress(bool is_ipv6, 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_NetAddress_Private* addr) { 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_interface<PPB_NetAddress_Private_1_1>()) { 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get_interface<PPB_NetAddress_Private_1_1>()->GetAnyAddress( 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_FromBool(is_ipv6), 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) addr); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (has_interface<PPB_NetAddress_Private_1_0>()) { 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get_interface<PPB_NetAddress_Private_1_0>()->GetAnyAddress( 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_FromBool(is_ipv6), 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) addr); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (has_interface<PPB_NetAddress_Private_0_1>()) { 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get_interface<PPB_NetAddress_Private_0_1>()->GetAnyAddress( 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_FromBool(is_ipv6), 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) addr); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_NetAddressFamily_Private NetAddressPrivate::GetFamily( 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PP_NetAddress_Private& addr) { 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_interface<PPB_NetAddress_Private_1_1>()) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return get_interface<PPB_NetAddress_Private_1_1>()->GetFamily(&addr); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_interface<PPB_NetAddress_Private_1_0>()) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return get_interface<PPB_NetAddress_Private_1_0>()->GetFamily(&addr); 153eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return PP_NETADDRESSFAMILY_PRIVATE_UNSPECIFIED; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint16_t NetAddressPrivate::GetPort(const PP_NetAddress_Private& addr) { 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_interface<PPB_NetAddress_Private_1_1>()) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return get_interface<PPB_NetAddress_Private_1_1>()->GetPort(&addr); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_interface<PPB_NetAddress_Private_1_0>()) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return get_interface<PPB_NetAddress_Private_1_0>()->GetPort(&addr); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool NetAddressPrivate::GetAddress(const PP_NetAddress_Private& addr, 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void* address, 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint16_t address_size) { 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_interface<PPB_NetAddress_Private_1_1>()) { 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PP_ToBool(get_interface<PPB_NetAddress_Private_1_1>()->GetAddress( 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &addr, 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) address, 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) address_size)); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_interface<PPB_NetAddress_Private_1_0>()) { 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PP_ToBool(get_interface<PPB_NetAddress_Private_1_0>()->GetAddress( 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &addr, 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) address, 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) address_size)); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint32_t NetAddressPrivate::GetScopeID(const PP_NetAddress_Private& addr) { 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_interface<PPB_NetAddress_Private_1_1>()) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return get_interface<PPB_NetAddress_Private_1_1>()->GetScopeID(&addr); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool NetAddressPrivate::CreateFromIPv4Address( 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint8_t ip[4], 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint16_t port, 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct PP_NetAddress_Private* addr_out) { 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_interface<PPB_NetAddress_Private_1_1>()) { 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get_interface<PPB_NetAddress_Private_1_1>()->CreateFromIPv4Address( 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ip, port, addr_out); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool NetAddressPrivate::CreateFromIPv6Address( 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint8_t ip[16], 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t scope_id, 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint16_t port, 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct PP_NetAddress_Private* addr_out) { 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_interface<PPB_NetAddress_Private_1_1>()) { 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get_interface<PPB_NetAddress_Private_1_1>()->CreateFromIPv6Address( 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ip, scope_id, port, addr_out); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace pp 219