| // Copyright 2022 The ChromiumOS Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef PRINT_TOOLS_HELPERS_H_ | |
| #define PRINT_TOOLS_HELPERS_H_ | |
| #include <string> | |
| #include <netdb.h> | |
| // Validates the protocol of `url` and modifies it if necessary. The protocols | |
| // ipp and ipps are converted to http and https, respectively. If the | |
| // conversion occurs, adds a port number if one is not specified. | |
| // Prints an error message to stderr and returns false in the following cases: | |
| // * `url` does not contain "://" substring | |
| // * the protocol is not one of http, https, ipp or ipps. | |
| // Does not verify the correctness of the given URL. | |
| bool ConvertIppToHttp(std::string& url); | |
| // Function signature matching `getaddrinfo`. Used for unit test dependency | |
| // injection in `ResolveZeroconfHostname`. | |
| typedef int (*ResolveFunc)(const char*, | |
| const char*, | |
| const struct addrinfo*, | |
| struct addrinfo**); | |
| // If `url` contains a hostname ending with .local, use `resolver` to look it up | |
| // and replace the hostname with the first IP address returned. Leave `url` | |
| // unchanged for any other hostname. This function assumes that `url` has | |
| // already been normalized via `ConvertIppToHttp`. | |
| bool ResolveZeroconfHostname(std::string& url, ResolveFunc resolver = nullptr); | |
| #endif // PRINT_TOOLS_HELPERS_H_ |