#include <grpc/support/port_platform.h>
#include "src/core/lib/address_utils/sockaddr_utils.h"
#include <errno.h>
#include <inttypes.h>
#include <string.h>
#include <initializer_list>
#include <string>
#include <utility>
#include "absl/status/status.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/str_format.h"
#include <grpc/support/log.h>
#include "src/core/lib/gprpp/crash.h"
#include "src/core/lib/gprpp/host_port.h"
#include "src/core/lib/iomgr/port.h"
#include "src/core/lib/iomgr/sockaddr.h"
#include "src/core/lib/iomgr/socket_utils.h"
#include "src/core/lib/uri/uri_parser.h"
#ifdef GRPC_HAVE_UNIX_SOCKET
#include <sys/un.h>
#endif
#ifdef GRPC_HAVE_UNIX_SOCKET
static absl::StatusOr<std::string> grpc_sockaddr_to_uri_unix_if_possible(
const grpc_resolved_address* resolved_addr) { … }
#else
static absl::StatusOr<std::string> grpc_sockaddr_to_uri_unix_if_possible(
const grpc_resolved_address* ) {
return absl::InvalidArgumentError("Unix socket is not supported.");
}
#endif
static const uint8_t kV4MappedPrefix[] = …;
int grpc_sockaddr_is_v4mapped(const grpc_resolved_address* resolved_addr,
grpc_resolved_address* resolved_addr4_out) { … }
int grpc_sockaddr_to_v4mapped(const grpc_resolved_address* resolved_addr,
grpc_resolved_address* resolved_addr6_out) { … }
int grpc_sockaddr_is_wildcard(const grpc_resolved_address* resolved_addr,
int* port_out) { … }
void grpc_sockaddr_make_wildcards(int port, grpc_resolved_address* wild4_out,
grpc_resolved_address* wild6_out) { … }
void grpc_sockaddr_make_wildcard4(int port,
grpc_resolved_address* resolved_wild_out) { … }
void grpc_sockaddr_make_wildcard6(int port,
grpc_resolved_address* resolved_wild_out) { … }
absl::StatusOr<std::string> grpc_sockaddr_to_string(
const grpc_resolved_address* resolved_addr, bool normalize) { … }
absl::StatusOr<std::string> grpc_sockaddr_to_uri(
const grpc_resolved_address* resolved_addr) { … }
const char* grpc_sockaddr_get_uri_scheme(
const grpc_resolved_address* resolved_addr) { … }
int grpc_sockaddr_get_family(const grpc_resolved_address* resolved_addr) { … }
int grpc_sockaddr_get_port(const grpc_resolved_address* resolved_addr) { … }
int grpc_sockaddr_set_port(grpc_resolved_address* resolved_addr, int port) { … }
std::string grpc_sockaddr_get_packed_host(
const grpc_resolved_address* resolved_addr) { … }
void grpc_sockaddr_mask_bits(grpc_resolved_address* address,
uint32_t mask_bits) { … }
bool grpc_sockaddr_match_subnet(const grpc_resolved_address* address,
const grpc_resolved_address* subnet_address,
uint32_t mask_bits) { … }