Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var NewClientStream = func(host, endpoint string) (ClientStreamTransport, error) { u := url.URL{Scheme: "ws", Host: host, Path: endpoint} h := http.Header{} h.Set("Sec-WebSocket-Protocol", "grpc-websockets") var conn *websocket.Conn conn, _, err := websocket.DefaultDialer.Dial(u.String(), h) if err != nil { return nil, errors.Wrapf(err, "failed to dial to '%s'", u.String()) } return &webSocketTransport{ host: host, endpoint: endpoint, conn: conn, }, nil }
View Source
var NewUnary = func(host string, opts *ConnectOptions) UnaryTransport { cl := http.DefaultClient transport := &http.Transport{} if opts.WithTLS { transport.TLSClientConfig = &tls.Config{} if opts.TLSCertificate != nil { certPool := x509.NewCertPool() decoded, _ := pem.Decode(opts.TLSCertificate) if decoded == nil { panic("failed to decode cert") } cert, err := x509.ParseCertificate(decoded.Bytes) if err != nil { panic(err) } certPool.AddCert(cert) transport.TLSClientConfig.RootCAs = certPool transport.TLSClientConfig.ServerName = cert.DNSNames[0] } transport.TLSClientConfig.InsecureSkipVerify = opts.TlsInsecureSkipVerify } if opts.Timeout != 0 { cl.Timeout = opts.Timeout } else { cl.Timeout = 5 * time.Second } if opts.IdleConnTimeout != 0 { transport.IdleConnTimeout = opts.IdleConnTimeout } if opts.TlsHandshakeTimeout != 0 { transport.TLSHandshakeTimeout = opts.TlsHandshakeTimeout } if opts.ExpectContinueTimeout != 0 { transport.ExpectContinueTimeout = opts.ExpectContinueTimeout } cl.Transport = transport return &httpTransport{ host: host, client: cl, opts: opts, header: make(http.Header), clientLock: &sync.RWMutex{}, } }
NewUnary returns an httpTransport object wrapped as a UnaryTransport object
Functions ¶
This section is empty.
Types ¶
type ClientStreamTransport ¶
type ClientStreamTransport interface {
Header() (http.Header, error)
Trailer() http.Header
// SetRequestHeader sets headers to send gRPC-Web server.
// It should be called before calling Send.
SetRequestHeader(h http.Header)
Send(ctx context.Context, body io.Reader) error
Receive(ctx context.Context) (io.ReadCloser, error)
// CloseSend sends a close signal to the server.
CloseSend() error
// Close closes the connection.
Close() error
}
type ConnectOptions ¶
type ConnectOptions struct {
// Toggle tls on/off
WithTLS bool
// Certificate for TLS connections
TLSCertificate []byte
// IdleConnTimeout is the maximum amount of time an idle
// (keep-alive) connection will remain idle before closing
// itself.
// Zero means no limit.
IdleConnTimeout time.Duration
// TLSHandshakeTimeout specifies the maximum amount of time waiting to
// wait for a TLS handshake. Zero means no timeout.
TlsHandshakeTimeout time.Duration
// ExpectContinueTimeout, if non-zero, specifies the amount of
// time to wait for a server's first response headers after fully
// writing the request headers
ExpectContinueTimeout time.Duration
// Skip standard tls certificate verifications
TlsInsecureSkipVerify bool
Timeout time.Duration
}
ConnectOptions struct contains configuration parameters for DialContext
type UnaryTransport ¶
type UnaryTransport interface {
Header() http.Header
Send(ctx context.Context, endpoint, contentType string, body io.Reader) (http.Header, []byte, error)
GetRemoteCertificate() (*x509.Certificate, error)
Close() error
}
UnaryTransport is the public interface for the transport package
Source Files
¶
- option.go
- transport.go
Click to show internal directories.
Click to hide internal directories.