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 DnsSdInstanceEndpointToServiceInfo(const discovery::DnsSdInstanceEndpoint & endpoint)25ErrorOr<ServiceInfo> DnsSdInstanceEndpointToServiceInfo( 26 const discovery::DnsSdInstanceEndpoint& endpoint) { 27 ServiceInfo service_info; 28 // Check if |endpoint| is a known adb service name 29 for (int i = 0; i < kNumADBDNSServices; ++i) { 30 if (endpoint.service_id() == kADBDNSServices[i]) { 31 service_info.service_name = endpoint.service_id(); 32 service_info.instance_name = endpoint.instance_id(); 33 break; 34 } 35 if (i == kNumADBDNSServices - 1) { 36 LOG(ERROR) << "Got unknown service name [" << endpoint.service_id() << "]"; 37 return Error::Code::kParameterInvalid; 38 } 39 } 40 41 service_info.port = endpoint.port(); 42 for (const IPAddress& address : endpoint.addresses()) { 43 if (!service_info.v4_address && address.IsV4()) { 44 service_info.v4_address = address; 45 } else if (!service_info.v6_address && address.IsV6()) { 46 service_info.v6_address = address; 47 } 48 } 49 CHECK(service_info.v4_address || service_info.v6_address); 50 return service_info; 51 } 52 53 } // namespace mdns 54