Chromium Code Reviews| 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 74f9f3da6f3061e13032d2967d90cd9363ca85f4..04d9708c6efa93bc779806318a5bb9eec4e7bc64 100644 |
| --- a/ppapi/shared_impl/private/net_address_private_impl.cc |
| +++ b/ppapi/shared_impl/private/net_address_private_impl.cc |
| @@ -108,6 +108,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 ntohs(a->sin6_scope_id); |
| + } |
| + default: |
| + return 0; |
| + } |
| +} |
| + |
| PP_Bool AreHostsEqual(const PP_NetAddress_Private* addr1, |
| const PP_NetAddress_Private* addr2) { |
| if (!NetAddressPrivateImpl::ValidateNetAddress(*addr1) || |
| @@ -330,6 +341,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); |
|
dmichael (off chromium)
2012/03/21 19:33:17
nit: a is not a very good name
Sergey Ulanov
2012/03/21 19:44:51
It's consistent with the rest of the code in this
viettrungluu
2012/03/22 04:54:34
Right, and since it's probably my fault: I think t
|
| + 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, |
| @@ -349,6 +386,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 { |
| @@ -363,6 +414,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 |