summaryrefslogtreecommitdiffstats
path: root/ppapi/shared_impl
diff options
context:
space:
mode:
authorsergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-22 22:41:06 +0000
committersergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-22 22:41:06 +0000
commitb13deef887384a4d8ff51ff6027128d0ffeeacfc (patch)
treea62578ff4d767ccc81657c50d97514086ec3c311 /ppapi/shared_impl
parentf497f0c6437d077911e6569789616754528e8a51 (diff)
downloadchromium_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.cc58
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