1*3f982cf4SFabien Sanglard // Copyright 2019 The Chromium Authors. All rights reserved. 2*3f982cf4SFabien Sanglard // Use of this source code is governed by a BSD-style license that can be 3*3f982cf4SFabien Sanglard // found in the LICENSE file. 4*3f982cf4SFabien Sanglard 5*3f982cf4SFabien Sanglard #ifndef DISCOVERY_MDNS_MDNS_SENDER_H_ 6*3f982cf4SFabien Sanglard #define DISCOVERY_MDNS_MDNS_SENDER_H_ 7*3f982cf4SFabien Sanglard 8*3f982cf4SFabien Sanglard #include "platform/api/udp_socket.h" 9*3f982cf4SFabien Sanglard #include "platform/base/error.h" 10*3f982cf4SFabien Sanglard #include "platform/base/ip_address.h" 11*3f982cf4SFabien Sanglard 12*3f982cf4SFabien Sanglard namespace openscreen { 13*3f982cf4SFabien Sanglard namespace discovery { 14*3f982cf4SFabien Sanglard 15*3f982cf4SFabien Sanglard class MdnsMessage; 16*3f982cf4SFabien Sanglard 17*3f982cf4SFabien Sanglard class MdnsSender { 18*3f982cf4SFabien Sanglard public: 19*3f982cf4SFabien Sanglard // MdnsSender does not own |socket| and expects that its lifetime exceeds the 20*3f982cf4SFabien Sanglard // lifetime of MdnsSender. 21*3f982cf4SFabien Sanglard explicit MdnsSender(UdpSocket* socket); 22*3f982cf4SFabien Sanglard MdnsSender(const MdnsSender& other) = delete; 23*3f982cf4SFabien Sanglard MdnsSender(MdnsSender&& other) noexcept = delete; 24*3f982cf4SFabien Sanglard virtual ~MdnsSender(); 25*3f982cf4SFabien Sanglard 26*3f982cf4SFabien Sanglard MdnsSender& operator=(const MdnsSender& other) = delete; 27*3f982cf4SFabien Sanglard MdnsSender& operator=(MdnsSender&& other) noexcept = delete; 28*3f982cf4SFabien Sanglard 29*3f982cf4SFabien Sanglard virtual Error SendMulticast(const MdnsMessage& message); 30*3f982cf4SFabien Sanglard virtual Error SendMessage(const MdnsMessage& message, 31*3f982cf4SFabien Sanglard const IPEndpoint& endpoint); 32*3f982cf4SFabien Sanglard 33*3f982cf4SFabien Sanglard void OnSendError(UdpSocket* socket, Error error); 34*3f982cf4SFabien Sanglard 35*3f982cf4SFabien Sanglard private: 36*3f982cf4SFabien Sanglard UdpSocket* const socket_; 37*3f982cf4SFabien Sanglard }; 38*3f982cf4SFabien Sanglard 39*3f982cf4SFabien Sanglard } // namespace discovery 40*3f982cf4SFabien Sanglard } // namespace openscreen 41*3f982cf4SFabien Sanglard 42*3f982cf4SFabien Sanglard #endif // DISCOVERY_MDNS_MDNS_SENDER_H_ 43