// 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. #include "discovery/dnssd/impl/instance_key.h" #include #include "absl/strings/str_join.h" #include "absl/strings/str_split.h" #include "discovery/dnssd/impl/conversion_layer.h" #include "discovery/dnssd/impl/service_key.h" #include "discovery/dnssd/public/dns_sd_instance.h" #include "discovery/mdns/mdns_records.h" #include "discovery/mdns/public/mdns_constants.h" namespace openscreen { namespace discovery { InstanceKey::InstanceKey(const MdnsRecord& record) : InstanceKey(GetDomainName(record)) {} InstanceKey::InstanceKey(const DomainName& domain) : ServiceKey(domain), instance_id_(domain.labels()[0]) { OSP_DCHECK(IsInstanceValid(instance_id_)); } InstanceKey::InstanceKey(const DnsSdInstance& instance) : InstanceKey(instance.instance_id(), instance.service_id(), instance.domain_id()) {} InstanceKey::InstanceKey(absl::string_view instance, absl::string_view service, absl::string_view domain) : ServiceKey(service, domain), instance_id_(instance) { OSP_DCHECK(IsInstanceValid(instance_id_)) << "invalid instance id" << instance; } InstanceKey::InstanceKey(const InstanceKey& other) = default; InstanceKey::InstanceKey(InstanceKey&& other) = default; InstanceKey& InstanceKey::operator=(const InstanceKey& rhs) = default; InstanceKey& InstanceKey::operator=(InstanceKey&& rhs) = default; DomainName InstanceKey::GetName() const { std::vector labels = ServiceKey::GetName().labels(); labels.insert(labels.begin(), instance_id()); return DomainName(std::move(labels)); } } // namespace discovery } // namespace openscreen