|
|
@ -966,6 +966,7 @@ grpc_error_handle Chttp2ServerAddPort(Server* server, const char* addr, |
|
|
|
args_modifier); |
|
|
|
args_modifier); |
|
|
|
} |
|
|
|
} |
|
|
|
*port_num = -1; |
|
|
|
*port_num = -1; |
|
|
|
|
|
|
|
absl::StatusOr<std::vector<grpc_resolved_address>> resolved_or; |
|
|
|
absl::StatusOr<std::vector<EventEngine::ResolvedAddress>> results = |
|
|
|
absl::StatusOr<std::vector<EventEngine::ResolvedAddress>> results = |
|
|
|
std::vector<EventEngine::ResolvedAddress>(); |
|
|
|
std::vector<EventEngine::ResolvedAddress>(); |
|
|
|
std::vector<grpc_error_handle> error_list; |
|
|
|
std::vector<grpc_error_handle> error_list; |
|
|
@ -974,13 +975,21 @@ grpc_error_handle Chttp2ServerAddPort(Server* server, const char* addr, |
|
|
|
// Using lambda to avoid use of goto.
|
|
|
|
// Using lambda to avoid use of goto.
|
|
|
|
grpc_error_handle error = [&]() { |
|
|
|
grpc_error_handle error = [&]() { |
|
|
|
grpc_error_handle error; |
|
|
|
grpc_error_handle error; |
|
|
|
if (absl::ConsumePrefix(&parsed_addr_unprefixed, kUnixUriPrefix) || |
|
|
|
// TODO(ladynana, yijiem): this code does not handle address URIs correctly:
|
|
|
|
absl::ConsumePrefix(&parsed_addr_unprefixed, kUnixAbstractUriPrefix) || |
|
|
|
// it's parsing `unix://foo/bar` as path `/foo/bar` when it should be
|
|
|
|
absl::ConsumePrefix(&parsed_addr_unprefixed, kVSockUriPrefix)) { |
|
|
|
// parsing it as authority `foo` and path `/bar`. This needs to be fixed as
|
|
|
|
absl::StatusOr<EventEngine::ResolvedAddress> result = |
|
|
|
// part of the address URI work.
|
|
|
|
grpc_event_engine::experimental::URIToResolvedAddress(parsed_addr); |
|
|
|
if (absl::ConsumePrefix(&parsed_addr_unprefixed, kUnixUriPrefix)) { |
|
|
|
GRPC_RETURN_IF_ERROR(result.status()); |
|
|
|
resolved_or = grpc_resolve_unix_domain_address(parsed_addr_unprefixed); |
|
|
|
results->push_back(*result); |
|
|
|
GRPC_RETURN_IF_ERROR(resolved_or.status()); |
|
|
|
|
|
|
|
} else if (absl::ConsumePrefix(&parsed_addr_unprefixed, |
|
|
|
|
|
|
|
kUnixAbstractUriPrefix)) { |
|
|
|
|
|
|
|
resolved_or = |
|
|
|
|
|
|
|
grpc_resolve_unix_abstract_domain_address(parsed_addr_unprefixed); |
|
|
|
|
|
|
|
GRPC_RETURN_IF_ERROR(resolved_or.status()); |
|
|
|
|
|
|
|
} else if (absl::ConsumePrefix(&parsed_addr_unprefixed, kVSockUriPrefix)) { |
|
|
|
|
|
|
|
resolved_or = grpc_resolve_vsock_address(parsed_addr_unprefixed); |
|
|
|
|
|
|
|
GRPC_RETURN_IF_ERROR(resolved_or.status()); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
if (IsEventEngineDnsNonClientChannelEnabled()) { |
|
|
|
if (IsEventEngineDnsNonClientChannelEnabled()) { |
|
|
|
absl::StatusOr<std::unique_ptr<EventEngine::DNSResolver>> ee_resolver = |
|
|
|
absl::StatusOr<std::unique_ptr<EventEngine::DNSResolver>> ee_resolver = |
|
|
@ -1001,6 +1010,12 @@ grpc_error_handle Chttp2ServerAddPort(Server* server, const char* addr, |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (resolved_or.ok()) { |
|
|
|
|
|
|
|
for (const auto& addr : *resolved_or) { |
|
|
|
|
|
|
|
results->push_back( |
|
|
|
|
|
|
|
grpc_event_engine::experimental::CreateResolvedAddress(addr)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
GRPC_RETURN_IF_ERROR(results.status()); |
|
|
|
GRPC_RETURN_IF_ERROR(results.status()); |
|
|
|
// Create a listener for each resolved address.
|
|
|
|
// Create a listener for each resolved address.
|
|
|
|
for (EventEngine::ResolvedAddress& addr : *results) { |
|
|
|
for (EventEngine::ResolvedAddress& addr : *results) { |
|
|
|