network_util.cc 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. // Copyright 2019 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "components/openscreen_platform/network_util.h"
  5. #include <array>
  6. #include <memory>
  7. #include "base/notreached.h"
  8. #include "net/base/address_family.h"
  9. #include "net/base/ip_endpoint.h"
  10. #include "net/base/net_errors.h"
  11. namespace openscreen_platform {
  12. const net::IPAddress ToNetAddress(const openscreen::IPAddress& address) {
  13. switch (address.version()) {
  14. case openscreen::IPAddress::Version::kV4: {
  15. std::array<uint8_t, openscreen::IPAddress::kV4Size> bytes_v4;
  16. address.CopyToV4(bytes_v4.data());
  17. return net::IPAddress(bytes_v4.data(), bytes_v4.size());
  18. }
  19. case openscreen::IPAddress::Version::kV6: {
  20. std::array<uint8_t, openscreen::IPAddress::kV6Size> bytes_v6;
  21. address.CopyToV6(bytes_v6.data());
  22. return net::IPAddress(bytes_v6.data(), bytes_v6.size());
  23. }
  24. }
  25. }
  26. const net::IPEndPoint ToNetEndPoint(const openscreen::IPEndpoint& endpoint) {
  27. return net::IPEndPoint(ToNetAddress(endpoint.address), endpoint.port);
  28. }
  29. openscreen::IPAddress::Version ToOpenScreenVersion(
  30. const net::AddressFamily family) {
  31. switch (family) {
  32. case net::AddressFamily::ADDRESS_FAMILY_IPV6:
  33. return openscreen::IPAddress::Version::kV6;
  34. case net::AddressFamily::ADDRESS_FAMILY_IPV4:
  35. return openscreen::IPAddress::Version::kV4;
  36. case net::AddressFamily::ADDRESS_FAMILY_UNSPECIFIED:
  37. NOTREACHED();
  38. return openscreen::IPAddress::Version::kV4;
  39. }
  40. }
  41. const openscreen::IPEndpoint ToOpenScreenEndPoint(
  42. const net::IPEndPoint& endpoint) {
  43. const openscreen::IPAddress::Version version =
  44. ToOpenScreenVersion(endpoint.GetFamily());
  45. return openscreen::IPEndpoint{
  46. openscreen::IPAddress{version, endpoint.address().bytes().data()},
  47. endpoint.port()};
  48. }
  49. } // namespace openscreen_platform