21 #include "absl/strings/str_cat.h"
22 #include "absl/strings/str_format.h"
23 #include "absl/strings/str_split.h"
24 #include "absl/synchronization/blocking_counter.h"
30 #include "src/proto/grpc/testing/istio_echo.pb.h"
32 using proto::EchoRequest;
33 using proto::EchoResponse;
34 using proto::EchoTestService;
35 using proto::ForwardEchoRequest;
36 using proto::ForwardEchoResponse;
68 EchoTestServiceImpl::EchoTestServiceImpl(
std::string hostname,
81 StringRefToStringView(
context->ExperimentalGetAuthority()),
83 const std::multimap<string_ref, string_ref>
metadata =
87 if (kv.first.ends_with(
"-bin")) {
90 absl::StrAppend(&s, kRequestHeader,
"=", StringRefToStringView(kv.first),
91 ":", StringRefToStringView(kv.second),
"\n");
115 const ForwardEchoRequest*
request,
118 size_t colon = raw_url.find_first_of(
':');
120 if (colon == std::string::npos) {
125 scheme = raw_url.substr(0, colon);
126 std::shared_ptr<Channel>
channel;
127 if (scheme ==
"xds") {
134 }
else if (scheme ==
"grpc") {
146 return forwarding_stub_->ForwardEcho(&forwarding_ctx, *
request,
response);
151 std::chrono::duration<double> duration_per_query =
152 std::chrono::nanoseconds::zero();
158 EchoRequest echo_request;
159 echo_request.set_message(
request->message());
165 if (
header.key() != kHostField) {
171 std::chrono::microseconds(
request->timeout_micros());
172 calls[
i].context.set_deadline(deadline);
178 std::this_thread::sleep_for(duration_per_query);