remotedialer

package module
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 18, 2020 License: Apache-2.0 Imports: 24 Imported by: 0

README

Reverse Tunneling Dialer

Client makes an outbound connection to a server. The server can now do net.Dial from the server that will actually do a net.Dial on the client and pipe all bytes back and forth.

Fun times!

Refer to server/ and client/ how to use. Or don't.... This framework can hurt your head trying to conceptualize.

See also:

  • inlets.dev which uses the client and server components to form a tunnel for clients behind NAT or firewalls.

Documentation

Index

Constants

View Source
const (
	Data messageType = iota + 1
	Connect
	Error
	AddClient
	RemoveClient
	TokenConnect
)
View Source
const (
	PingWaitDuration  = 60 * time.Second
	PingWriteInterval = 5 * time.Second
	MaxRead           = 8192
	HandshakeTimeOut  = 10 * time.Second
)

Variables

View Source
var (
	ClientTokenProto   = "TokenRegister"
	ClientTokenAddress = "ClientTokenAddress"
)
View Source
var (
	Token          = "X-API-Tunnel-Token"
	ID             = "X-API-Tunnel-ID"
	TunnelType     = "X-API-Tunnel-Type"
	TunnelTypePeer = "peer"
)
View Source
var PrintTunnelData bool

PrintTunnelData No tunnel logging by default

Functions

func ClientConnect

func ClientConnect(ctx context.Context, wsURL string, headers http.Header, dialer *websocket.Dialer,
	auth ConnectAuthorizer, onConnect func(context.Context) error)

func DefaultErrorWriter

func DefaultErrorWriter(rw http.ResponseWriter, req *http.Request, code int, err error)

func RegisterTokenGetter

func RegisterTokenGetter(tokenGet, cacertGet clientTokenGetter)

Types

type Authorizer

type Authorizer func(req *http.Request) (clientKey string, authed bool, err error)

type ConnectAuthorizer

type ConnectAuthorizer func(proto, address string) bool

type Dialer

type Dialer func(network, address string) (net.Conn, error)

type ErrorWriter

type ErrorWriter func(rw http.ResponseWriter, req *http.Request, code int, err error)

type Server

type Server struct {
	PeerID    string
	PeerToken string
	// contains filtered or unexported fields
}

func New

func New(tokenCacheLen int, auth Authorizer, errorWriter ErrorWriter) *Server

func (*Server) AddPeer

func (s *Server) AddPeer(url, id, token string)

func (*Server) CloseSession added in v0.1.5

func (s *Server) CloseSession(clientKey string)

func (*Server) Dial

func (s *Server) Dial(clientKey string, deadline time.Duration, proto, address string) (net.Conn, error)

func (*Server) DialWithClientToken

func (s *Server) DialWithClientToken(clientKey string, deadline time.Duration, proto, address string) (net.Conn, error)

func (*Server) Dialer

func (s *Server) Dialer(clientKey string, deadline time.Duration) Dialer

func (*Server) GetClusterToken

func (s *Server) GetClusterToken(clientKey string, deadline time.Duration) (*clientToken, error)

func (*Server) HasSession

func (s *Server) HasSession(clientKey string) bool

func (*Server) RemovePeer

func (s *Server) RemovePeer(id string)

func (*Server) ServeHTTP

func (s *Server) ServeHTTP(rw http.ResponseWriter, req *http.Request)

type Session

type Session struct {
	sync.Mutex
	// contains filtered or unexported fields
}

func NewClientSession

func NewClientSession(auth ConnectAuthorizer, conn *websocket.Conn) *Session

func (*Session) Close

func (s *Session) Close()

func (*Session) Serve

func (s *Session) Serve(ctx context.Context) (int, error)

Directories

Path Synopsis
internal

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL