Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(921)

Unified Diff: remoting/client/plugin/pepper_util.cc

Issue 10384171: Fix PepperPortAllocator to resolve STUN addresses using HostResolverPrivate. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/client/plugin/pepper_util.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/client/plugin/pepper_util.cc
diff --git a/remoting/client/plugin/pepper_util.cc b/remoting/client/plugin/pepper_util.cc
index 525d7d322d4c2bdfa6a06a513176b91ccc13a3e6..c230842a6118f73c8648941dc3aff2cca025f422 100644
--- a/remoting/client/plugin/pepper_util.cc
+++ b/remoting/client/plugin/pepper_util.cc
@@ -5,8 +5,11 @@
#include "remoting/client/plugin/pepper_util.h"
#include "base/callback.h"
+#include "base/logging.h"
#include "ppapi/c/pp_completion_callback.h"
#include "ppapi/cpp/module.h"
+#include "ppapi/cpp/private/net_address_private.h"
+#include "third_party/libjingle/source/talk/base/socketaddress.h"
namespace remoting {
@@ -22,4 +25,66 @@ pp::CompletionCallback PpCompletionCallback(
new base::Callback<void(int)>(callback));
}
+bool SocketAddressToPpAddressWithPort(const talk_base::SocketAddress& address,
+ PP_NetAddress_Private* pp_address,
+ uint16_t port) {
+ bool result = false;
+ switch (address.ipaddr().family()) {
+ case AF_INET: {
+ in_addr addr = address.ipaddr().ipv4_address();
+ result = pp::NetAddressPrivate::CreateFromIPv4Address(
+ reinterpret_cast<uint8_t*>(&addr), port, pp_address);
+ break;
+ }
+ case AF_INET6: {
+ in6_addr addr = address.ipaddr().ipv6_address();
+ result = pp::NetAddressPrivate::CreateFromIPv6Address(
+ addr.s6_addr, 0, port, pp_address);
+ break;
+ }
+ default: {
+ LOG(WARNING) << "Unknown address family: " << address.ipaddr().family();
+ }
+ }
+ if (!result) {
+ LOG(WARNING) << "Failed to convert address: " << address.ToString();
+ }
+ return result;
+}
+
+bool SocketAddressToPpAddress(const talk_base::SocketAddress& address,
+ PP_NetAddress_Private* pp_address) {
+ return SocketAddressToPpAddressWithPort(address, pp_address, address.port());
+}
+
+bool PpAddressToSocketAddress(const PP_NetAddress_Private& pp_address,
+ talk_base::SocketAddress* address) {
+ uint8_t addr_storage[16];
+ bool result = pp::NetAddressPrivate::GetAddress(
+ pp_address, &addr_storage, sizeof(addr_storage));
+
+ if (result) {
+ switch (pp::NetAddressPrivate::GetFamily(pp_address)) {
+ case PP_NETADDRESSFAMILY_IPV4:
+ address->SetIP(talk_base::IPAddress(
+ *reinterpret_cast<in_addr*>(addr_storage)));
+ break;
+ case PP_NETADDRESSFAMILY_IPV6:
+ address->SetIP(talk_base::IPAddress(
+ *reinterpret_cast<in6_addr*>(addr_storage)));
+ break;
+ default:
+ result = false;
+ }
+ }
+
+ if (!result) {
+ LOG(WARNING) << "Failed to convert address: "
+ << pp::NetAddressPrivate::Describe(pp_address, true);
+ } else {
+ address->SetPort(pp::NetAddressPrivate::GetPort(pp_address));
+ }
+ return result;
+}
+
} // namespace remoting
« no previous file with comments | « remoting/client/plugin/pepper_util.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698