Line data Source code
1 : /*
2 : *
3 : * Copyright (c) 2022 Project CHIP Authors
4 : *
5 : * Licensed under the Apache License, Version 2.0 (the "License");
6 : * you may not use this file except in compliance with the License.
7 : * You may obtain a copy of the License at
8 : *
9 : * http://www.apache.org/licenses/LICENSE-2.0
10 : *
11 : * Unless required by applicable law or agreed to in writing, software
12 : * distributed under the License is distributed on an "AS IS" BASIS,
13 : * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 : * See the License for the specific language governing permissions and
15 : * limitations under the License.
16 : */
17 : #pragma once
18 :
19 : #include <lib/dnssd/minimal_mdns/ListenIterator.h>
20 : #include <lib/dnssd/minimal_mdns/ServerIPAddresses.h>
21 : #include <lib/support/CHIPMem.h>
22 :
23 : namespace mdns {
24 : namespace Minimal {
25 :
26 : /// Describes a policy of endpoints and IP addresses to use for
27 : /// MinMDNS listening and advertisement.
28 : class AddressPolicy
29 : {
30 : public:
31 65 : virtual ~AddressPolicy() = default;
32 :
33 : /// Get all endpoints on which minimal MDNS should listen on.
34 : virtual chip::Platform::UniquePtr<ListenIterator> GetListenEndpoints() = 0;
35 :
36 : /// Fetch all the IP addresses for the given interface which are valid
37 : /// for DNSSD server advertisement.
38 : ///
39 : /// Generally this should skip invalid addresses even if reported by the
40 : /// underlying operating system (e.g. linux could skip deprecated/temporary/dad-failed ones).
41 : virtual chip::Platform::UniquePtr<IpAddressIterator> GetIpAddressesForEndpoint(chip::Inet::InterfaceId interfaceId,
42 : chip::Inet::IPAddressType type) = 0;
43 : };
44 :
45 : /// Fetch the globally used MinMDNS address policy
46 : AddressPolicy * GetAddressPolicy();
47 :
48 : /// Update the global address policy.
49 : ///
50 : /// MUST be called before any minmdns functionality is used (e.g. server
51 : /// startup)
52 : void SetAddressPolicy(AddressPolicy * policy);
53 :
54 : } // namespace Minimal
55 : } // namespace mdns
|