pull/37901/head
yijiem 4 months ago
parent 5a43754ae7
commit a0f21d2422
  1. 29
      src/core/ext/transport/chttp2/server/chttp2_server.cc

@ -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) {

Loading…
Cancel
Save