docks

package
v1.6.11 Latest Latest
Warning

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

Go to latest
Published: May 28, 2024 License: GPL-3.0 Imports: 27 Imported by: 0

Documentation

Index

Constants

View Source
const (
	CraneMsgTypeEnd              = 0
	CraneMsgTypeInfo             = 1
	CraneMsgTypeRequestHubInfo   = 2
	CraneMsgTypeVerify           = 3
	CraneMsgTypeStartEncrypted   = 4
	CraneMsgTypeStartUnencrypted = 5
)

Crane Msg Types.

View Source
const (
	CraneMeasurementTTLDefault    = 30 * time.Minute
	CraneMeasurementTTLByCostBase = 1 * time.Minute
	CraneMeasurementTTLByCostMin  = 30 * time.Minute
	CraneMeasurementTTLByCostMax  = 3 * time.Hour
)

Measurement Configuration.

View Source
const (
	// CapacityTestOpType is the type ID of the capacity test operation.
	CapacityTestOpType = "capacity"
)
View Source
const ExpandOpType string = "expand"

ExpandOpType is the type ID of the expand operation.

View Source
const (
	// LatencyTestOpType is the type ID of the latency test operation.
	LatencyTestOpType = "latency"
)
View Source
const NetStatePeriodInterval = 15 * time.Minute

NetStatePeriodInterval defines the interval some of the net state should be reset.

View Source
const (
	// QOTD holds the quote of the day to return on idling unused connections.
	QOTD = "Privacy is not an option, and it shouldn't be the price we accept for just getting on the Internet.\nGary Kovacs\n"
)
View Source
const SyncStateOpType = "sync/state"

SyncStateOpType is the type ID of the sync state operation.

View Source
const (
	// WhoAmIType is the type ID of the latency test operation.
	WhoAmIType = "whoami"
)

Variables

View Source
var (
	ErrDone = errors.New("crane is done")
)

Errors.

Functions

func AssignCrane

func AssignCrane(hubID string, crane *Crane)

AssignCrane assigns a crane to the given Hub ID.

func GetAllAssignedCranes

func GetAllAssignedCranes() map[string]*Crane

GetAllAssignedCranes returns a copy of the map of all assigned cranes.

func ImportAndVerifyHubInfo

func ImportAndVerifyHubInfo(ctx context.Context, hubID string, announcementData, statusData []byte, mapName string, scope hub.Scope) (h *hub.Hub, forward bool, tErr *terminal.Error)

ImportAndVerifyHubInfo imports the given hub message and verifies them.

func MeasureHub

func MeasureHub(ctx context.Context, h *hub.Hub, checkExpiryWith time.Duration) *terminal.Error

MeasureHub measures the connection to this Hub and saves the results to the Hub.

func RegisterCraneUpdateHook

func RegisterCraneUpdateHook(fn func(crane *Crane))

RegisterCraneUpdateHook allows the captain to hook into receiving updates for cranes.

func ResetCraneUpdateHook

func ResetCraneUpdateHook()

ResetCraneUpdateHook resets the hook for receiving updates for cranes.

Types

type CapacityTestOp

type CapacityTestOp struct {
	terminal.OperationBase
	// contains filtered or unexported fields
}

CapacityTestOp is used for capacity test operations.

func NewCapacityTestOp

func NewCapacityTestOp(t terminal.Terminal, opts *CapacityTestOptions) (*CapacityTestOp, *terminal.Error)

NewCapacityTestOp runs a capacity test.

func (*CapacityTestOp) Deliver

func (op *CapacityTestOp) Deliver(msg *terminal.Msg) *terminal.Error

Deliver delivers a message.

func (*CapacityTestOp) HandleStop

func (op *CapacityTestOp) HandleStop(tErr *terminal.Error) (errorToSend *terminal.Error)

HandleStop gives the operation the ability to cleanly shut down. The returned error is the error to send to the other side. Should never be called directly. Call Stop() instead.

func (*CapacityTestOp) Result

func (op *CapacityTestOp) Result() <-chan *terminal.Error

Result returns the result (end error) of the operation.

func (*CapacityTestOp) Type

func (op *CapacityTestOp) Type() string

Type returns the type ID.

type CapacityTestOptions

type CapacityTestOptions struct {
	TestVolume int
	MaxTime    time.Duration
	// contains filtered or unexported fields
}

CapacityTestOptions holds options for the capacity test.

type Crane

type Crane struct {
	// ID is the ID of the Crane.
	ID string

	// ConnectedHub is the identity of the remote Hub.
	ConnectedHub *hub.Hub
	// NetState holds the network optimization state.
	// It must always be set and the reference must not be changed.
	// Access to fields within are coordinated by itself.
	NetState *NetworkOptimizationState

	// Controller is the Crane's Controller Terminal.
	Controller *CraneControllerTerminal
	// contains filtered or unexported fields
}

Crane is the primary duplexer and connection manager.

func GetAssignedCrane

func GetAssignedCrane(hubID string) *Crane

GetAssignedCrane returns the assigned crane of the given Hub ID.

func NewCrane

func NewCrane(ship ships.Ship, connectedHub *hub.Hub, id *cabin.Identity) (*Crane, error)

NewCrane returns a new crane.

func (*Crane) AbandonTerminal

func (crane *Crane) AbandonTerminal(id uint32, err *terminal.Error)

AbandonTerminal abandons the terminal with the given ID.

func (*Crane) AbortStopping

func (crane *Crane) AbortStopping() (aborted bool)

AbortStopping aborts the stopping.

func (*Crane) Authenticated

func (crane *Crane) Authenticated() bool

Authenticated returns whether the other side of the crane has authenticated itself with an access code.

func (*Crane) EstablishNewTerminal

func (crane *Crane) EstablishNewTerminal(
	localTerm terminal.Terminal,
	initData *container.Container,
) *terminal.Error

EstablishNewTerminal establishes a new terminal with the crane.

func (*Crane) IsMine

func (crane *Crane) IsMine() bool

IsMine returns whether the crane was started on this side.

func (*Crane) IsStopping

func (crane *Crane) IsStopping() bool

IsStopping returns whether the crane is stopping.

func (*Crane) LocalAddr

func (crane *Crane) LocalAddr() net.Addr

LocalAddr returns ship's local address.

func (*Crane) MarkStopping

func (crane *Crane) MarkStopping() (stopping bool)

MarkStopping marks the crane as stopping.

func (*Crane) MarkStoppingRequested

func (crane *Crane) MarkStoppingRequested()

MarkStoppingRequested marks the crane as stopping requested.

func (*Crane) NotifyUpdate

func (crane *Crane) NotifyUpdate()

NotifyUpdate calls the registers crane update hook function.

func (*Crane) Public

func (crane *Crane) Public() bool

Public returns whether the crane has been published.

func (*Crane) Publish

func (crane *Crane) Publish() error

Publish publishes the connection as a lane.

func (*Crane) RemoteAddr

func (crane *Crane) RemoteAddr() net.Addr

RemoteAddr returns ship's local address.

func (*Crane) Send

func (crane *Crane) Send(msg *terminal.Msg, timeout time.Duration) *terminal.Error

Send is used by others to send a message through the crane.

func (*Crane) Start

func (crane *Crane) Start(callerCtx context.Context) error

Start starts the crane.

func (*Crane) Stop

func (crane *Crane) Stop(err *terminal.Error)

Stop stops the crane.

func (*Crane) Stopped

func (crane *Crane) Stopped() bool

Stopped returns whether the crane has stopped.

func (*Crane) String

func (crane *Crane) String() string

func (*Crane) Transport

func (crane *Crane) Transport() *hub.Transport

Transport returns ship's transport.

func (*Crane) VerifyConnectedHub

func (crane *Crane) VerifyConnectedHub(callerCtx context.Context) error

VerifyConnectedHub verifies the connected Hub.

type CraneControllerTerminal

type CraneControllerTerminal struct {
	*terminal.TerminalBase

	Crane *Crane
}

CraneControllerTerminal is a terminal for the crane itself.

func NewLocalCraneControllerTerminal

func NewLocalCraneControllerTerminal(
	crane *Crane,
	initMsg *terminal.TerminalOpts,
) (*CraneControllerTerminal, *container.Container, *terminal.Error)

NewLocalCraneControllerTerminal returns a new local crane controller.

func NewRemoteCraneControllerTerminal

func NewRemoteCraneControllerTerminal(
	crane *Crane,
	initData *container.Container,
) (*CraneControllerTerminal, *terminal.TerminalOpts, *terminal.Error)

NewRemoteCraneControllerTerminal returns a new remote crane controller.

func (*CraneControllerTerminal) HandleAbandon

func (controller *CraneControllerTerminal) HandleAbandon(err *terminal.Error) (errorToSend *terminal.Error)

HandleAbandon gives the terminal the ability to cleanly shut down.

func (*CraneControllerTerminal) HandleDestruction

func (controller *CraneControllerTerminal) HandleDestruction(err *terminal.Error)

HandleDestruction gives the terminal the ability to clean up.

func (*CraneControllerTerminal) SyncState

func (controller *CraneControllerTerminal) SyncState(ctx context.Context) *terminal.Error

SyncState runs a sync state operation.

type CraneTerminal

type CraneTerminal struct {
	*terminal.TerminalBase

	// Add-Ons
	terminal.SessionAddOn
	// contains filtered or unexported fields
}

CraneTerminal is a terminal started by a crane.

func NewLocalCraneTerminal

func NewLocalCraneTerminal(
	crane *Crane,
	remoteHub *hub.Hub,
	initMsg *terminal.TerminalOpts,
) (*CraneTerminal, *container.Container, *terminal.Error)

NewLocalCraneTerminal returns a new local crane terminal.

func NewRemoteCraneTerminal

func NewRemoteCraneTerminal(
	crane *Crane,
	id uint32,
	initData *container.Container,
) (*CraneTerminal, *terminal.TerminalOpts, *terminal.Error)

NewRemoteCraneTerminal returns a new remote crane terminal.

func (*CraneTerminal) GrantPermission

func (t *CraneTerminal) GrantPermission(grant terminal.Permission)

GrantPermission grants the given permissions. Additionally, it will mark the crane as authenticated, if not public.

func (*CraneTerminal) HandleDestruction

func (t *CraneTerminal) HandleDestruction(err *terminal.Error)

HandleDestruction gives the terminal the ability to clean up. The terminal has already fully shut down at this point. Should never be called directly. Call Abandon() instead.

func (*CraneTerminal) IsBeingAbandoned

func (t *CraneTerminal) IsBeingAbandoned() bool

IsBeingAbandoned returns whether the terminal is being abandoned.

func (*CraneTerminal) LocalAddr

func (t *CraneTerminal) LocalAddr() net.Addr

LocalAddr returns the crane's local address.

func (*CraneTerminal) RemoteAddr

func (t *CraneTerminal) RemoteAddr() net.Addr

RemoteAddr returns the crane's remote address.

func (*CraneTerminal) Transport

func (t *CraneTerminal) Transport() *hub.Transport

Transport returns the crane's transport.

type ExpandOp

type ExpandOp struct {
	terminal.OperationBase
	// contains filtered or unexported fields
}

ExpandOp is used to expand to another Hub.

func (*ExpandOp) Ctx

func (op *ExpandOp) Ctx() context.Context

Ctx returns the operation context.

func (*ExpandOp) Deliver

func (op *ExpandOp) Deliver(msg *terminal.Msg) *terminal.Error

Deliver delivers a message to the relay operation.

func (*ExpandOp) Flush

func (op *ExpandOp) Flush(timeout time.Duration)

Flush writes all data in the queues.

func (*ExpandOp) FmtID

func (op *ExpandOp) FmtID() string

FmtID returns the expansion ID hierarchy.

func (*ExpandOp) HandleStop

func (op *ExpandOp) HandleStop(err *terminal.Error) (errorToSend *terminal.Error)

HandleStop gives the operation the ability to cleanly shut down. The returned error is the error to send to the other side. Should never be called directly. Call Stop() instead.

func (*ExpandOp) Type

func (op *ExpandOp) Type() string

Type returns the type ID.

type ExpansionRelayTerminal

type ExpansionRelayTerminal struct {
	terminal.BareTerminal
	// contains filtered or unexported fields
}

ExpansionRelayTerminal is a relay used for expansion.

func (*ExpansionRelayTerminal) Abandon

func (t *ExpansionRelayTerminal) Abandon(err *terminal.Error)

Abandon shuts down the terminal unregistering it from upstream and calling HandleAbandon().

func (*ExpansionRelayTerminal) Ctx

Ctx returns the relay terminal context.

func (*ExpansionRelayTerminal) Deliver

func (t *ExpansionRelayTerminal) Deliver(msg *terminal.Msg) *terminal.Error

Deliver delivers a message to the relay terminal.

func (*ExpansionRelayTerminal) Flush

func (t *ExpansionRelayTerminal) Flush(timeout time.Duration)

Flush writes all data in the queues.

func (*ExpansionRelayTerminal) FmtID

func (t *ExpansionRelayTerminal) FmtID() string

FmtID returns the expansion ID hierarchy.

func (*ExpansionRelayTerminal) HandleAbandon

func (t *ExpansionRelayTerminal) HandleAbandon(err *terminal.Error) (errorToSend *terminal.Error)

HandleAbandon gives the terminal the ability to cleanly shut down. The returned error is the error to send to the other side. Should never be called directly. Call Abandon() instead.

func (*ExpansionRelayTerminal) HandleDestruction

func (t *ExpansionRelayTerminal) HandleDestruction(err *terminal.Error)

HandleDestruction gives the terminal the ability to clean up. The terminal has already fully shut down at this point. Should never be called directly. Call Abandon() instead.

func (*ExpansionRelayTerminal) ID

ID returns the operation ID.

type ExpansionTerminal

type ExpansionTerminal struct {
	*terminal.TerminalBase
	// contains filtered or unexported fields
}

ExpansionTerminal is used for expanding to another Hub.

func ExpandTo

func ExpandTo(from terminal.Terminal, routeTo string, encryptFor *hub.Hub) (*ExpansionTerminal, *terminal.Error)

ExpandTo initiates an expansion.

func (*ExpansionTerminal) CustomIDFormat

func (t *ExpansionTerminal) CustomIDFormat() string

CustomIDFormat formats the terminal ID.

func (*ExpansionTerminal) HandleDestruction

func (t *ExpansionTerminal) HandleDestruction(err *terminal.Error)

HandleDestruction gives the terminal the ability to clean up. The terminal has already fully shut down at this point. Should never be called directly. Call Abandon() instead.

func (*ExpansionTerminal) MarkReachable

func (t *ExpansionTerminal) MarkReachable()

MarkReachable marks the terminal as reachable via the existing network internal relayed connection.

func (*ExpansionTerminal) NeedsReachableCheck

func (t *ExpansionTerminal) NeedsReachableCheck(maxCheckAge time.Duration) bool

NeedsReachableCheck returns whether the terminal should be checked if it is reachable via the existing network internal relayed connection.

func (*ExpansionTerminal) SetChangeNotifyFunc

func (t *ExpansionTerminal) SetChangeNotifyFunc(f func())

SetChangeNotifyFunc sets a callback function that is called when the terminal state changes.

type ExpansionTerminalRelayOp

type ExpansionTerminalRelayOp struct {
	terminal.OperationBase
	// contains filtered or unexported fields
}

ExpansionTerminalRelayOp is the operation that connects to the relay.

func (*ExpansionTerminalRelayOp) Deliver

func (op *ExpansionTerminalRelayOp) Deliver(msg *terminal.Msg) *terminal.Error

Deliver delivers a message to the operation.

func (*ExpansionTerminalRelayOp) HandleStop

func (op *ExpansionTerminalRelayOp) HandleStop(err *terminal.Error) (errorToSend *terminal.Error)

HandleStop gives the operation the ability to cleanly shut down. The returned error is the error to send to the other side. Should never be called directly. Call Stop() instead.

func (*ExpansionTerminalRelayOp) Type

func (op *ExpansionTerminalRelayOp) Type() string

Type returns the type ID.

type LatencyTestClientOp

type LatencyTestClientOp struct {
	LatencyTestOp
	// contains filtered or unexported fields
}

LatencyTestClientOp is the client version of LatencyTestOp.

func NewLatencyTestOp

func NewLatencyTestOp(t terminal.Terminal) (*LatencyTestClientOp, *terminal.Error)

NewLatencyTestOp runs a latency test.

func (*LatencyTestClientOp) Deliver

func (op *LatencyTestClientOp) Deliver(msg *terminal.Msg) *terminal.Error

Deliver delivers a message to the operation.

func (*LatencyTestClientOp) HandleStop

func (op *LatencyTestClientOp) HandleStop(tErr *terminal.Error) (errorToSend *terminal.Error)

HandleStop gives the operation the ability to cleanly shut down. The returned error is the error to send to the other side. Should never be called directly. Call Stop() instead.

func (*LatencyTestClientOp) Result

func (op *LatencyTestClientOp) Result() <-chan *terminal.Error

Result returns the result (end error) of the operation.

type LatencyTestOp

type LatencyTestOp struct {
	terminal.OperationBase
}

LatencyTestOp is used to measure latency.

func (*LatencyTestOp) Deliver

func (op *LatencyTestOp) Deliver(msg *terminal.Msg) *terminal.Error

Deliver delivers a message to the operation.

func (*LatencyTestOp) Type

func (op *LatencyTestOp) Type() string

Type returns the type ID.

type NetworkOptimizationState

type NetworkOptimizationState struct {
	// contains filtered or unexported fields
}

NetworkOptimizationState holds data for optimization purposes.

func (*NetworkOptimizationState) GetTrafficStats

func (netState *NetworkOptimizationState) GetTrafficStats() (
	lifetimeBytesIn uint64,
	lifetimeBytesOut uint64,
	lifetimeStarted time.Time,
	periodBytesIn uint64,
	periodBytesOut uint64,
	periodStarted time.Time,
)

GetTrafficStats returns the traffic stats.

func (*NetworkOptimizationState) LapsePeriod

func (netState *NetworkOptimizationState) LapsePeriod()

LapsePeriod lapses the net state period, if needed.

func (*NetworkOptimizationState) ReportTraffic

func (netState *NetworkOptimizationState) ReportTraffic(bytes uint64, in bool)

ReportTraffic adds the reported transferred data to the traffic stats.

func (*NetworkOptimizationState) RequestStoppingSuggested

func (netState *NetworkOptimizationState) RequestStoppingSuggested(maxNotSuggestedDuration time.Duration) bool

RequestStoppingSuggested returns whether the crane should request stopping.

func (*NetworkOptimizationState) StopSuggested

func (netState *NetworkOptimizationState) StopSuggested() bool

StopSuggested returns whether the crane should be stopped.

func (*NetworkOptimizationState) StoppingState

func (netState *NetworkOptimizationState) StoppingState() (requested, requestedByPeer bool, markedAt time.Time)

StoppingState returns when the stopping state.

func (*NetworkOptimizationState) StoppingSuggested

func (netState *NetworkOptimizationState) StoppingSuggested() bool

StoppingSuggested returns whether the crane should be marked as stopping.

func (*NetworkOptimizationState) UpdateLastSuggestedAt

func (netState *NetworkOptimizationState) UpdateLastSuggestedAt()

UpdateLastSuggestedAt sets when the lane was last suggested to the current time.

type SyncStateMessage

type SyncStateMessage struct {
	Stopping        bool
	RequestStopping bool
}

SyncStateMessage holds the sync data.

type SyncStateOp

type SyncStateOp struct {
	terminal.OneOffOperationBase
}

SyncStateOp is used to sync the crane state.

func (*SyncStateOp) Type

func (op *SyncStateOp) Type() string

Type returns the type ID.

type WhoAmIOp

type WhoAmIOp struct {
	terminal.OneOffOperationBase
	// contains filtered or unexported fields
}

WhoAmIOp is used to request some metadata about the other side.

func NewWhoAmIOp

func NewWhoAmIOp(t terminal.Terminal) (*WhoAmIOp, *terminal.Error)

NewWhoAmIOp starts a new whoami operation.

func (*WhoAmIOp) Deliver

func (op *WhoAmIOp) Deliver(msg *terminal.Msg) *terminal.Error

Deliver delivers a message to the operation.

func (*WhoAmIOp) HandleStop

func (op *WhoAmIOp) HandleStop(err *terminal.Error) (errorToSend *terminal.Error)

HandleStop gives the operation the ability to cleanly shut down. The returned error is the error to send to the other side. Should never be called directly. Call Stop() instead.

func (*WhoAmIOp) Type

func (op *WhoAmIOp) Type() string

Type returns the type ID.

type WhoAmIResponse

type WhoAmIResponse struct {
	// Timestamp in nanoseconds
	Timestamp int64 `cbor:"t,omitempty" json:"t,omitempty"`

	// Addr is the remote address as reported by the crane terminal (IP and port).
	Addr string `cbor:"a,omitempty" json:"a,omitempty"`
}

WhoAmIResponse is a whoami response.

func WhoAmI

WhoAmI executes a whoami operation and returns the response.

Jump to

Keyboard shortcuts

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