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 <inet/IPAddress.h> 20 : #include <inet/InetInterface.h> 21 : 22 : namespace mdns { 23 : namespace Minimal { 24 : 25 : /// Provides a list of intefaces to listen on. 26 : /// 27 : /// When listening on IP, both IP address type (IPv4 or IPv6) and interface id 28 : /// are important. In particular, when using link-local IP addresses, the actual 29 : /// interface matters (e.g. FF02::FB will care over which IPv6 interface it is sent) 30 : /// 31 : /// For MDNS in particular, you may want: 32 : /// - IPv4 listen on InterfaceId::Null() 33 : /// - IPv6 listen on every specific interface id available (except local loopback and other 34 : /// not usable interfaces like docker) 35 : class ListenIterator 36 : { 37 : public: 38 74 : virtual ~ListenIterator() {} 39 : 40 : // Get the next interface/address type to listen on 41 : virtual bool Next(chip::Inet::InterfaceId * id, chip::Inet::IPAddressType * type) = 0; 42 : }; 43 : 44 : } // namespace Minimal 45 : } // namespace mdns