/* * Copyright (c) 2021 Apple Inc. All rights reserved. * * 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 * * https://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. */ #ifndef MISC_UTILITIES_H #define MISC_UTILITIES_H //====================================================================================================================== // MARK: - Headers #include // For sockaddr. #include "nullability.h" // For NULLABLE and NONNULL. #include "mDNSEmbeddedAPI.h" // For mDNSAddr. //====================================================================================================================== // MARK: - Macros #ifndef __APPLE__ #ifndef require #define require(assertion, exception_label) \ do { \ if (__builtin_expect(!(assertion), 0)) { \ goto exception_label; \ } \ } while (false) #endif // require #ifndef require_action #define require_action(assertion, exception_label, action) \ do { \ if (__builtin_expect(!(assertion), 0)) { \ { \ action; \ } \ goto exception_label; \ } \ } while (false) #endif // require_action #endif // __APPLE__ //====================================================================================================================== // MARK: - Function Declarations /*! * @brief * Convert struct in_addr to mDNSAddr. * * @param v4 * The IPv4 struct in_addr to be converted. * * @result * The converted mDNSAddr. */ mDNSAddr mDNSAddr_from_in_addr(const struct in_addr * NONNULL v4); /*! * @brief * Convert struct in6_addr to mDNSAddr. * * @param v6 * The IPv6 struct in6_addr to be converted. * * @result * The converted mDNSAddr. */ mDNSAddr mDNSAddr_from_in6_addr(const struct in6_addr * NONNULL v6); /*! * @brief * Convert struct sockaddr to mDNSAddr. * * @param sa * The struct sockaddr to be converted. * * @result * The converted mDNSAddr. */ mDNSAddr mDNSAddr_from_sockaddr(const struct sockaddr * NONNULL sa); const char * NONNULL get_address_string_from_mDNSAddr(const mDNSAddr * const NONNULL addr, char out_string_buf[static NONNULL INET6_ADDRSTRLEN + 1]); #endif // MISC_UTILITIES_H