// Copyright 2019 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef DISCOVERY_MDNS_MDNS_RECORD_CHANGED_CALLBACK_H_ #define DISCOVERY_MDNS_MDNS_RECORD_CHANGED_CALLBACK_H_ #include #include "discovery/mdns/mdns_records.h" #include "util/osp_logging.h" namespace openscreen { namespace discovery { enum class RecordChangedEvent { kCreated, kUpdated, kExpired, }; class MdnsRecordChangedCallback; struct PendingQueryChange { enum ChangeType { kStartQuery, kStopQuery }; DomainName name; DnsType dns_type; DnsClass dns_class; MdnsRecordChangedCallback* callback; ChangeType change_type; }; class MdnsRecordChangedCallback { public: virtual ~MdnsRecordChangedCallback() = default; // Called when |record| has been changed. // NOTE: This callback may not modify the instance from which it is called. // The return value of this function must be the set of all record changes to // be made once the operation completes. virtual std::vector OnRecordChanged( const MdnsRecord& record, RecordChangedEvent event) = 0; }; inline std::ostream& operator<<(std::ostream& output, RecordChangedEvent event) { switch (event) { case RecordChangedEvent::kCreated: return output << "Create"; case RecordChangedEvent::kUpdated: return output << "Update"; case RecordChangedEvent::kExpired: return output << "Expiry"; } OSP_NOTREACHED(); } } // namespace discovery } // namespace openscreen #endif // DISCOVERY_MDNS_MDNS_RECORD_CHANGED_CALLBACK_H_