Skip to content

Latest commit

 

History

History

drpcmigrate

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

package drpcmigrate

import "storj.io/drpc/drpcmigrate"

Package drpcmigrate provides tools to support drpc concurrently alongside gRPC on the same ports. See the grpc_and_drpc example in the examples folder for expected usage.

Usage

var Closed = errs.New("listener closed")

Closed is returned by routed listeners when the mux is closed.

var DRPCHeader = "DRPC!!!1"

DRPCHeader is a header for DRPC connections to use. This is designed to not conflict with a headerless gRPC, HTTP, or TLS request.

func DialWithHeader

func DialWithHeader(ctx context.Context, network, address string, header string) (net.Conn, error)

DialWithHeader is like net.Dial, but uses HeaderConns with the provided header.

type HeaderConn

type HeaderConn struct {
	net.Conn
}

HeaderConn fulfills the net.Conn interface. On the first call to Write it will write the Header.

func NewHeaderConn

func NewHeaderConn(conn net.Conn, header string) *HeaderConn

NewHeaderConn returns a new *HeaderConn that writes the provided header as part of the first Write.

func (*HeaderConn) Write

func (d *HeaderConn) Write(buf []byte) (n int, err error)

Write will write buf to the underlying conn. If this is the first time Write is called it will prepend the Header to the beginning of the write.

type HeaderDialer

type HeaderDialer struct {
	net.Dialer
	Header string
}

HeaderDialer is a net.Dialer-like that prefixes all conns with the provided header.

func (*HeaderDialer) Dial

func (d *HeaderDialer) Dial(network, address string) (net.Conn, error)

Dial will dial the address on the named network, creating a connection that will write the configured Header on the first user-requested write.

func (*HeaderDialer) DialContext

func (d *HeaderDialer) DialContext(ctx context.Context, network, address string) (net.Conn, error)

DialContext will dial the address on the named network, creating a connection that will write the configured Header on the first user-requested write.

type ListenMux

type ListenMux struct {
}

ListenMux lets one multiplex a listener into different listeners based on the first bytes sent on the connection.

func NewListenMux

func NewListenMux(base net.Listener, prefixLen int) *ListenMux

NewListenMux creates a ListenMux that reads the prefixLen bytes from any connections Accepted by the passed in listener and dispatches to the appropriate route.

func (*ListenMux) Default

func (m *ListenMux) Default() net.Listener

Default returns the net.Listener that is used if no route matches.

func (*ListenMux) Route

func (m *ListenMux) Route(prefix string) net.Listener

Route returns a listener that will be used if the first bytes are the given prefix. The length of the prefix must match the original passed in prefixLen.

func (*ListenMux) Run

func (m *ListenMux) Run(ctx context.Context) error

Run calls listen on the provided listener and passes connections to the routed listeners.