diff options
author | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-22 22:41:06 +0000 |
---|---|---|
committer | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-22 22:41:06 +0000 |
commit | b13deef887384a4d8ff51ff6027128d0ffeeacfc (patch) | |
tree | a62578ff4d767ccc81657c50d97514086ec3c311 /ppapi/shared_impl | |
parent | f497f0c6437d077911e6569789616754528e8a51 (diff) | |
download | chromium_src-b13deef887384a4d8ff51ff6027128d0ffeeacfc.zip chromium_src-b13deef887384a4d8ff51ff6027128d0ffeeacfc.tar.gz chromium_src-b13deef887384a4d8ff51ff6027128d0ffeeacfc.tar.bz2 |
Add CreateFromIPv[46]Address() in PPB_NetAddress_Private.
Review URL: http://codereview.chromium.org/9722008
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@128322 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi/shared_impl')
-rw-r--r-- | ppapi/shared_impl/private/net_address_private_impl.cc | 58 |
1 files changed, 57 insertions, 1 deletions
diff --git a/ppapi/shared_impl/private/net_address_private_impl.cc b/ppapi/shared_impl/private/net_address_private_impl.cc index 9d7ac2f..06875cb 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 |