summaryrefslogtreecommitdiffstats
path: root/jingle
diff options
context:
space:
mode:
authorsergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-15 19:12:13 +0000
committersergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-15 19:12:13 +0000
commit340b128fec2a5a1625e1d94f9b5f22a10ed199a6 (patch)
tree3c6fe24141aae4e1ef2bd2bf5581d1030f8fe029 /jingle
parent75ce659a26110749ef0b0b139cdf9b40c0afaad9 (diff)
downloadchromium_src-340b128fec2a5a1625e1d94f9b5f22a10ed199a6.zip
chromium_src-340b128fec2a5a1625e1d94f9b5f22a10ed199a6.tar.gz
chromium_src-340b128fec2a5a1625e1d94f9b5f22a10ed199a6.tar.bz2
Cleanup socket address conversion in libjingle glue code.
When converting between talk_base::SocketAddress and net::IpEndPoint IPv6 addresses were not supported and errors were not always handled correctly. Both of these problems fixed in this CL. Review URL: https://chromiumcodereview.appspot.com/13529031 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@206616 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'jingle')
-rw-r--r--jingle/glue/utils.cc30
-rw-r--r--jingle/glue/utils.h8
2 files changed, 16 insertions, 22 deletions
diff --git a/jingle/glue/utils.cc b/jingle/glue/utils.cc
index 5e8d44b..d58fce0 100644
--- a/jingle/glue/utils.cc
+++ b/jingle/glue/utils.cc
@@ -17,26 +17,20 @@
namespace jingle_glue {
-bool IPEndPointToSocketAddress(const net::IPEndPoint& address_chrome,
- talk_base::SocketAddress* address_lj) {
- if (address_chrome.GetFamily() != net::ADDRESS_FAMILY_IPV4) {
- LOG(ERROR) << "Only IPv4 addresses are supported.";
- return false;
- }
- uint32 ip_as_int = talk_base::NetworkToHost32(
- *reinterpret_cast<const uint32*>(&address_chrome.address()[0]));
- *address_lj = talk_base::SocketAddress(ip_as_int, address_chrome.port());
- return true;
+bool IPEndPointToSocketAddress(const net::IPEndPoint& ip_endpoint,
+ talk_base::SocketAddress* address) {
+ sockaddr_storage addr;
+ socklen_t len = sizeof(addr);
+ return ip_endpoint.ToSockAddr(reinterpret_cast<sockaddr*>(&addr), &len) &&
+ talk_base::SocketAddressFromSockAddrStorage(addr, address);
}
-bool SocketAddressToIPEndPoint(const talk_base::SocketAddress& address_lj,
- net::IPEndPoint* address_chrome) {
- uint32 ip = talk_base::HostToNetwork32(address_lj.ip());
- net::IPAddressNumber address;
- address.resize(net::kIPv4AddressSize);
- memcpy(&address[0], &ip, net::kIPv4AddressSize);
- *address_chrome = net::IPEndPoint(address, address_lj.port());
- return true;
+bool SocketAddressToIPEndPoint(const talk_base::SocketAddress& address,
+ net::IPEndPoint* ip_endpoint) {
+ sockaddr_storage addr;
+ int size = address.ToSockAddrStorage(&addr);
+ return (size > 0) &&
+ ip_endpoint->FromSockAddr(reinterpret_cast<sockaddr*>(&addr), size);
}
std::string SerializeP2PCandidate(const cricket::Candidate& candidate) {
diff --git a/jingle/glue/utils.h b/jingle/glue/utils.h
index 803416a..a655f71 100644
--- a/jingle/glue/utils.h
+++ b/jingle/glue/utils.h
@@ -24,10 +24,10 @@ namespace jingle_glue {
// Chromium and libjingle represent socket addresses differently. The
// following two functions are used to convert addresses from one
// representation to another.
-bool IPEndPointToSocketAddress(const net::IPEndPoint& address_chrome,
- talk_base::SocketAddress* address_lj);
-bool SocketAddressToIPEndPoint(const talk_base::SocketAddress& address_lj,
- net::IPEndPoint* address_chrome);
+bool IPEndPointToSocketAddress(const net::IPEndPoint& ip_endpoint,
+ talk_base::SocketAddress* address);
+bool SocketAddressToIPEndPoint(const talk_base::SocketAddress& address,
+ net::IPEndPoint* ip_endpoint);
// Helper functions to serialize and deserialize P2P candidates.
std::string SerializeP2PCandidate(const cricket::Candidate& candidate);