1 /* 2 * Copyright (C) 2020 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #include "client/openscreen/mdns_service_info.h" 18 19 #include "adb_mdns.h" 20 21 using namespace openscreen; 22 23 namespace mdns { 24 v4_address_string() const25std::string ServiceInfo::v4_address_string() const { 26 std::stringstream ss; 27 ss << v4_address; 28 return ss.str(); 29 } 30 v6_address_string() const31std::string ServiceInfo::v6_address_string() const { 32 std::stringstream ss; 33 ss << v6_address; 34 return ss.str(); 35 } 36 DnsSdInstanceEndpointToServiceInfo(const discovery::DnsSdInstanceEndpoint & endpoint)37ErrorOr<ServiceInfo> DnsSdInstanceEndpointToServiceInfo( 38 const discovery::DnsSdInstanceEndpoint& endpoint) { 39 ServiceInfo service_info; 40 // Check if |endpoint| is a known adb service name 41 for (int i = 0; i < kNumADBDNSServices; ++i) { 42 if (endpoint.service_id() == kADBDNSServices[i]) { 43 service_info.service_name = endpoint.service_id(); 44 service_info.instance_name = endpoint.instance_id(); 45 break; 46 } 47 if (i == kNumADBDNSServices - 1) { 48 LOG(ERROR) << "Got unknown service name [" << endpoint.service_id() << "]"; 49 return Error::Code::kParameterInvalid; 50 } 51 } 52 53 service_info.port = endpoint.port(); 54 for (const IPAddress& address : endpoint.addresses()) { 55 if (!service_info.v4_address && address.IsV4()) { 56 service_info.v4_address = address; 57 } else if (!service_info.v6_address && address.IsV6()) { 58 service_info.v6_address = address; 59 } 60 } 61 CHECK(service_info.v4_address || service_info.v6_address); 62 return service_info; 63 } 64 65 } // namespace mdns 66