net_udp_socket.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. // Copyright 2020 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. #ifndef COMPONENTS_OPENSCREEN_PLATFORM_NET_UDP_SOCKET_H_
  5. #define COMPONENTS_OPENSCREEN_PLATFORM_NET_UDP_SOCKET_H_
  6. #include "base/memory/raw_ptr.h"
  7. #include "net/base/io_buffer.h"
  8. #include "net/base/ip_endpoint.h"
  9. #include "net/socket/udp_socket.h"
  10. #include "third_party/openscreen/src/platform/api/udp_socket.h"
  11. namespace net {
  12. class IPEndPoint;
  13. }
  14. namespace openscreen_platform {
  15. class NetUdpSocket final : public openscreen::UdpSocket {
  16. public:
  17. NetUdpSocket(Client* client, const openscreen::IPEndpoint& local_endpoint);
  18. ~NetUdpSocket() override;
  19. NetUdpSocket& operator=(const NetUdpSocket&) = delete;
  20. NetUdpSocket& operator=(NetUdpSocket&&) = delete;
  21. private:
  22. void SendErrorToClient(openscreen::Error::Code openscreen_error,
  23. int net_error);
  24. void DoRead();
  25. bool HandleRecvFromResult(int result);
  26. void OnRecvFromCompleted(int result);
  27. void OnSendToCompleted(int result);
  28. // openscreen::UdpSocket implementation.
  29. bool IsIPv4() const override;
  30. bool IsIPv6() const override;
  31. openscreen::IPEndpoint GetLocalEndpoint() const override;
  32. void Bind() override;
  33. void SetMulticastOutboundInterface(
  34. openscreen::NetworkInterfaceIndex ifindex) override;
  35. void JoinMulticastGroup(const openscreen::IPAddress& address,
  36. openscreen::NetworkInterfaceIndex ifindex) override;
  37. void SendMessage(const void* data,
  38. size_t length,
  39. const openscreen::IPEndpoint& dest) override;
  40. void SetDscp(openscreen::UdpSocket::DscpMode state) override;
  41. const raw_ptr<Client> client_;
  42. // The local endpoint can change as a result of Bind() calls.
  43. openscreen::IPEndpoint local_endpoint_;
  44. net::UDPSocket udp_socket_;
  45. scoped_refptr<net::IOBuffer> read_buffer_;
  46. net::IPEndPoint from_address_;
  47. bool send_pending_ = false;
  48. };
  49. } // namespace openscreen_platform
  50. #endif // COMPONENTS_OPENSCREEN_PLATFORM_NET_UDP_SOCKET_H_