blob: d725b1c42f195a59b08527f0e9cba59a1695c548 [file] [log] [blame]
// 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 <vector>
#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<PendingQueryChange> 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_