mirror of https://github.com/linkerd/linkerd2.git
40 lines
1.1 KiB
Go
40 lines
1.1 KiB
Go
package public
|
|
|
|
import (
|
|
"bufio"
|
|
"context"
|
|
"net/http"
|
|
|
|
"github.com/linkerd/linkerd2/pkg/protohttp"
|
|
log "github.com/sirupsen/logrus"
|
|
"google.golang.org/grpc/metadata"
|
|
)
|
|
|
|
type streamClient struct {
|
|
ctx context.Context
|
|
reader *bufio.Reader
|
|
}
|
|
|
|
// satisfy the ClientStream interface
|
|
func (c streamClient) Header() (metadata.MD, error) { return nil, nil }
|
|
func (c streamClient) Trailer() metadata.MD { return nil }
|
|
func (c streamClient) CloseSend() error { return nil }
|
|
func (c streamClient) Context() context.Context { return c.ctx }
|
|
func (c streamClient) SendMsg(interface{}) error { return nil }
|
|
func (c streamClient) RecvMsg(interface{}) error { return nil }
|
|
|
|
func getStreamClient(ctx context.Context, httpRsp *http.Response) (streamClient, error) {
|
|
if err := protohttp.CheckIfResponseHasError(httpRsp); err != nil {
|
|
httpRsp.Body.Close()
|
|
return streamClient{}, err
|
|
}
|
|
|
|
go func() {
|
|
<-ctx.Done()
|
|
log.Debug("Closing response body after context marked as done")
|
|
httpRsp.Body.Close()
|
|
}()
|
|
|
|
return streamClient{ctx: ctx, reader: bufio.NewReader(httpRsp.Body)}, nil
|
|
}
|