1 // Copyright 2019 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
5 #include "discovery/dnssd/impl/instance_key.h"
6
7 #include <vector>
8
9 #include "absl/strings/str_join.h"
10 #include "absl/strings/str_split.h"
11 #include "discovery/dnssd/impl/conversion_layer.h"
12 #include "discovery/dnssd/impl/service_key.h"
13 #include "discovery/dnssd/public/dns_sd_instance.h"
14 #include "discovery/mdns/mdns_records.h"
15 #include "discovery/mdns/public/mdns_constants.h"
16
17 namespace openscreen {
18 namespace discovery {
19
InstanceKey(const MdnsRecord & record)20 InstanceKey::InstanceKey(const MdnsRecord& record)
21 : InstanceKey(GetDomainName(record)) {}
22
InstanceKey(const DomainName & domain)23 InstanceKey::InstanceKey(const DomainName& domain)
24 : ServiceKey(domain), instance_id_(domain.labels()[0]) {
25 OSP_DCHECK(IsInstanceValid(instance_id_));
26 }
27
InstanceKey(const DnsSdInstance & instance)28 InstanceKey::InstanceKey(const DnsSdInstance& instance)
29 : InstanceKey(instance.instance_id(),
30 instance.service_id(),
31 instance.domain_id()) {}
32
InstanceKey(absl::string_view instance,absl::string_view service,absl::string_view domain)33 InstanceKey::InstanceKey(absl::string_view instance,
34 absl::string_view service,
35 absl::string_view domain)
36 : ServiceKey(service, domain), instance_id_(instance) {
37 OSP_DCHECK(IsInstanceValid(instance_id_))
38 << "invalid instance id" << instance;
39 }
40
41 InstanceKey::InstanceKey(const InstanceKey& other) = default;
42 InstanceKey::InstanceKey(InstanceKey&& other) = default;
43
44 InstanceKey& InstanceKey::operator=(const InstanceKey& rhs) = default;
45 InstanceKey& InstanceKey::operator=(InstanceKey&& rhs) = default;
46
GetName() const47 DomainName InstanceKey::GetName() const {
48 std::vector<std::string> labels = ServiceKey::GetName().labels();
49 labels.insert(labels.begin(), instance_id());
50 return DomainName(std::move(labels));
51 }
52
53 } // namespace discovery
54 } // namespace openscreen
55