diff options
author | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-15 19:12:13 +0000 |
---|---|---|
committer | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-15 19:12:13 +0000 |
commit | 340b128fec2a5a1625e1d94f9b5f22a10ed199a6 (patch) | |
tree | 3c6fe24141aae4e1ef2bd2bf5581d1030f8fe029 /jingle | |
parent | 75ce659a26110749ef0b0b139cdf9b40c0afaad9 (diff) | |
download | chromium_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.cc | 30 | ||||
-rw-r--r-- | jingle/glue/utils.h | 8 |
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); |