/* * * Copyright (c) 2021-2023 Project CHIP Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "DnssdType.h" #include #include constexpr char kProtocolTcp[] = "._tcp"; constexpr char kProtocolUdp[] = "._udp"; namespace chip { namespace Dnssd { namespace Internal { std::string GetFullType(const char * type, DnssdServiceProtocol protocol) { std::ostringstream typeBuilder; typeBuilder << type; typeBuilder << (protocol == DnssdServiceProtocol::kDnssdProtocolUdp ? kProtocolUdp : kProtocolTcp); return typeBuilder.str(); } std::string GetFullType(const DnssdService * service) { return GetFullType(service->mType, service->mProtocol); } std::string GetFullTypeWithSubTypes(const char * type, DnssdServiceProtocol protocol) { auto fullType = GetFullType(type, protocol); std::string subtypeDelimiter = "._sub."; size_t position = fullType.find(subtypeDelimiter); if (position != std::string::npos) { fullType = fullType.substr(position + subtypeDelimiter.size()) + "," + fullType.substr(0, position); } return fullType; } std::string GetFullTypeWithSubTypes(const char * type, DnssdServiceProtocol protocol, const char * subTypes[], size_t subTypeSize) { std::ostringstream typeBuilder; typeBuilder << type; typeBuilder << (protocol == DnssdServiceProtocol::kDnssdProtocolUdp ? kProtocolUdp : kProtocolTcp); for (int i = 0; i < (int) subTypeSize; i++) { typeBuilder << ","; typeBuilder << subTypes[i]; } return typeBuilder.str(); } std::string GetFullTypeWithSubTypes(const DnssdService * service) { return GetFullTypeWithSubTypes(service->mType, service->mProtocol, service->mSubTypes, service->mSubTypeSize); } std::string GetFullTypeWithoutSubTypes(std::string fullType) { size_t position = fullType.find(","); if (position != std::string::npos) { fullType.erase(position); } return fullType; } std::string GetBaseType(const char * fulltype) { std::string type(fulltype); size_t position = type.find("."); if (position != std::string::npos) { type.erase(position); } return type; } } // namespace Internal } // namespace Dnssd } // namespace chip