| Index: ppapi/shared_impl/private/net_address_private_impl.cc
|
| diff --git a/ppapi/shared_impl/private/net_address_private_impl.cc b/ppapi/shared_impl/private/net_address_private_impl.cc
|
| index 9d7ac2f0ab345df5060549048bfab61164a790ad..06875cbf50336b0cba646f0bda1a44f0d585d2c9 100644
|
| --- a/ppapi/shared_impl/private/net_address_private_impl.cc
|
| +++ b/ppapi/shared_impl/private/net_address_private_impl.cc
|
| @@ -89,7 +89,7 @@ PP_Bool GetAddress(const PP_NetAddress_Private* addr,
|
| switch (GetFamilyInternal(addr)) {
|
| case AF_INET: {
|
| const sockaddr_in* a = reinterpret_cast<const sockaddr_in*>(addr->data);
|
| - if (address_size >= sizeof(a->sin_addr.s_addr)) {
|
| + if (address_size >= sizeof(a->sin_addr.s_addr)) {
|
| memcpy(address, &(a->sin_addr.s_addr), sizeof(a->sin_addr.s_addr));
|
| return PP_TRUE;
|
| }
|
| @@ -110,6 +110,17 @@ PP_Bool GetAddress(const PP_NetAddress_Private* addr,
|
| return PP_FALSE;
|
| }
|
|
|
| +uint32_t GetScopeID(const PP_NetAddress_Private* addr) {
|
| + switch (GetFamilyInternal(addr)) {
|
| + case AF_INET6: {
|
| + const sockaddr_in6* a = reinterpret_cast<const sockaddr_in6*>(addr->data);
|
| + return a->sin6_scope_id;
|
| + }
|
| + default:
|
| + return 0;
|
| + }
|
| +}
|
| +
|
| PP_Bool AreHostsEqual(const PP_NetAddress_Private* addr1,
|
| const PP_NetAddress_Private* addr2) {
|
| if (!NetAddressPrivateImpl::ValidateNetAddress(*addr1) ||
|
| @@ -332,6 +343,32 @@ void GetAnyAddress(PP_Bool is_ipv6, PP_NetAddress_Private* addr) {
|
| }
|
| }
|
|
|
| +void CreateFromIPv4Address(const uint8_t ip[4],
|
| + uint16_t port,
|
| + struct PP_NetAddress_Private* addr_out) {
|
| + memset(addr_out->data, 0,
|
| + arraysize(addr_out->data) * sizeof(addr_out->data[0]));
|
| + sockaddr_in* a = reinterpret_cast<sockaddr_in*>(addr_out->data);
|
| + addr_out->size = sizeof(*a);
|
| + a->sin_family = AF_INET;
|
| + memcpy(&(a->sin_addr), ip, sizeof(a->sin_addr));
|
| + a->sin_port = htons(port);
|
| +}
|
| +
|
| +void CreateFromIPv6Address(const uint8_t ip[16],
|
| + uint32_t scope_id,
|
| + uint16_t port,
|
| + struct PP_NetAddress_Private* addr_out) {
|
| + memset(addr_out->data, 0,
|
| + arraysize(addr_out->data) * sizeof(addr_out->data[0]));
|
| + sockaddr_in6* a = reinterpret_cast<sockaddr_in6*>(addr_out->data);
|
| + addr_out->size = sizeof(*a);
|
| + a->sin6_family = AF_INET6;
|
| + memcpy(&(a->sin6_addr), ip, sizeof(a->sin6_addr));
|
| + a->sin6_port = htons(port);
|
| + a->sin6_scope_id = scope_id;
|
| +}
|
| +
|
| const PPB_NetAddress_Private_0_1 net_address_private_interface_0_1 = {
|
| &AreEqual,
|
| &AreHostsEqual,
|
| @@ -351,6 +388,20 @@ const PPB_NetAddress_Private_1_0 net_address_private_interface_1_0 = {
|
| &GetAddress
|
| };
|
|
|
| +const PPB_NetAddress_Private_1_1 net_address_private_interface_1_1 = {
|
| + &AreEqual,
|
| + &AreHostsEqual,
|
| + &Describe,
|
| + &ReplacePort,
|
| + &GetAnyAddress,
|
| + &GetFamily,
|
| + &GetPort,
|
| + &GetAddress,
|
| + &GetScopeID,
|
| + &CreateFromIPv4Address,
|
| + &CreateFromIPv6Address
|
| +};
|
| +
|
| } // namespace
|
|
|
| namespace thunk {
|
| @@ -365,6 +416,11 @@ GetPPB_NetAddress_Private_1_0_Thunk() {
|
| return &net_address_private_interface_1_0;
|
| }
|
|
|
| +PPAPI_THUNK_EXPORT const PPB_NetAddress_Private_1_1*
|
| +GetPPB_NetAddress_Private_1_1_Thunk() {
|
| + return &net_address_private_interface_1_1;
|
| +}
|
| +
|
| } // namespace thunk
|
|
|
| // static
|
|
|