# Functions
CallRealGRPC handles real gRPC queries, i.e.
DecodeGrpcWebTextBody treats the body as a series of base64-encode chunks.
ExecuteQuery constructs the appropriate request, executes it, and records the response and related information in query.result.
ExecuteWebsocketQuery handles Websocket queries.
GetGRPCReqBody returns the body of the HTTP request using the HTTP/1.1-gRPC bridge format as described in the Envoy docs https://www.envoyproxy.io/docs/envoy/v1.9.0/configuration/http_filters/grpc_http1_bridge_filter.
NewSemaphore returns a new Semaphore with the specified capacity.