in proxy/protocol/grpc/client.go [86:124]
func (c *Client) Call(ctx context.Context, addr string, inv *invocation.Invocation, rsp interface{}) error {
var err error
reqSend, err := httputil.HTTPRequest(inv)
if err != nil {
return err
}
resp, ok := rsp.(*http.Response)
if !ok {
return ErrInvalidResp
}
ctx, cancel := context.WithCancel(ctx)
defer cancel()
if c.opts.TLSConfig != nil {
reqSend.URL.Scheme = SchemaHTTPS
} else {
reqSend.URL.Scheme = SchemaHTTP
}
if addr != "" {
reqSend.URL.Host = addr
}
var temp *http.Response
errChan := make(chan error, 1)
go func() {
temp, err = c.c.Do(reqSend)
errChan <- err
}()
select {
case <-ctx.Done():
err = ErrCanceled
case err = <-errChan:
if err == nil {
*resp = *temp
}
}
return err
}