docks

package
v0.7.6 Latest Latest
Warning

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

Go to latest
Published: Jan 18, 2024 License: AGPL-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 added in v0.3.5

func GetAllAssignedCranes() map[string]*Crane

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

func ImportAndVerifyHubInfo added in v0.3.0

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 added in v0.3.13

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 added in v0.3.0

func RegisterCraneUpdateHook(fn func(crane *Crane))

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

func ResetCraneUpdateHook added in v0.4.5

func ResetCraneUpdateHook()

ResetCraneUpdateHook resets the hook for receiving updates for cranes.

Types

type CapacityTestOp added in v0.3.11

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

CapacityTestOp is used for capacity test operations.

func NewCapacityTestOp added in v0.3.11

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

NewCapacityTestOp runs a capacity test.

func (*CapacityTestOp) Deliver added in v0.3.11

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

Deliver delivers a message.

func (*CapacityTestOp) HandleStop added in v0.6.0

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 added in v0.3.11

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

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

func (*CapacityTestOp) Type added in v0.3.11

func (op *CapacityTestOp) Type() string

Type returns the type ID.

type CapacityTestOptions added in v0.3.11

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 added in v0.3.0

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

AbandonTerminal abandons the terminal with the given ID.

func (*Crane) AbortStopping added in v0.3.18

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

AbortStopping aborts the stopping.

func (*Crane) Authenticated added in v0.3.13

func (crane *Crane) Authenticated() bool

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

func (*Crane) EstablishNewTerminal added in v0.3.0

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

EstablishNewTerminal establishes a new terminal with the crane.

func (*Crane) IsMine added in v0.3.13

func (crane *Crane) IsMine() bool

IsMine returns whether the crane was started on this side.

func (*Crane) IsStopping added in v0.3.18

func (crane *Crane) IsStopping() bool

IsStopping returns whether the crane is stopping.

func (*Crane) LocalAddr added in v0.3.0

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

LocalAddr returns ship's local address.

func (*Crane) MarkStopping added in v0.3.18

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

MarkStopping marks the crane as stopping.

func (*Crane) MarkStoppingRequested added in v0.4.6

func (crane *Crane) MarkStoppingRequested()

MarkStoppingRequested marks the crane as stopping requested.

func (*Crane) NotifyUpdate added in v0.3.0

func (crane *Crane) NotifyUpdate()

NotifyUpdate calls the registers crane update hook function.

func (*Crane) Public added in v0.3.0

func (crane *Crane) Public() bool

Public returns whether the crane has been published.

func (*Crane) Publish added in v0.3.0

func (crane *Crane) Publish() error

Publish publishes the connection as a lane.

func (*Crane) RemoteAddr added in v0.3.0

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

RemoteAddr returns ship's local address.

func (*Crane) Send added in v0.6.0

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 added in v0.3.11

func (crane *Crane) Stopped() bool

Stopped returns whether the crane has stopped.

func (*Crane) String added in v0.3.0

func (crane *Crane) String() string

func (*Crane) Transport added in v0.3.7

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

Transport returns ship's transport.

func (*Crane) VerifyConnectedHub added in v0.3.0

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

VerifyConnectedHub verifies the connected Hub.

type CraneControllerTerminal added in v0.3.0

type CraneControllerTerminal struct {
	*terminal.TerminalBase

	Crane *Crane
}

CraneControllerTerminal is a terminal for the crane itself.

func NewLocalCraneControllerTerminal added in v0.3.0

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

NewLocalCraneControllerTerminal returns a new local crane controller.

func NewRemoteCraneControllerTerminal added in v0.3.0

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

NewRemoteCraneControllerTerminal returns a new remote crane controller.

func (*CraneControllerTerminal) HandleAbandon added in v0.6.0

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

HandleAbandon gives the terminal the ability to cleanly shut down.

func (*CraneControllerTerminal) HandleDestruction added in v0.6.0

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

HandleDestruction gives the terminal the ability to clean up.

func (*CraneControllerTerminal) SyncState added in v0.3.18

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

SyncState runs a sync state operation.

type CraneTerminal added in v0.3.0

type CraneTerminal struct {
	*terminal.TerminalBase

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

CraneTerminal is a terminal started by a crane.

func NewLocalCraneTerminal added in v0.3.0

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

NewLocalCraneTerminal returns a new local crane terminal.

func NewRemoteCraneTerminal added in v0.3.0

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

NewRemoteCraneTerminal returns a new remote crane terminal.

func (*CraneTerminal) GrantPermission added in v0.3.13

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 added in v0.6.0

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 added in v0.4.4

func (t *CraneTerminal) IsBeingAbandoned() bool

IsBeingAbandoned returns whether the terminal is being abandoned.

func (*CraneTerminal) LocalAddr added in v0.3.0

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

LocalAddr returns the crane's local address.

func (*CraneTerminal) RemoteAddr added in v0.3.0

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

RemoteAddr returns the crane's remote address.

func (*CraneTerminal) Transport added in v0.3.7

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

Transport returns the crane's transport.

type ExpandOp added in v0.3.0

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

ExpandOp is used to expand to another Hub.

func (*ExpandOp) Ctx added in v0.3.0

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

Ctx returns the operation context.

func (*ExpandOp) Deliver added in v0.4.8

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

Deliver delivers a message to the relay operation.

func (*ExpandOp) Flush added in v0.4.8

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

Flush writes all data in the queues.

func (*ExpandOp) FmtID added in v0.3.0

func (op *ExpandOp) FmtID() string

FmtID returns the expansion ID hierarchy.

func (*ExpandOp) HandleStop added in v0.6.0

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 added in v0.3.0

func (op *ExpandOp) Type() string

Type returns the type ID.

type ExpansionRelayTerminal added in v0.3.0

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

ExpansionRelayTerminal is a relay used for expansion.

func (*ExpansionRelayTerminal) Abandon added in v0.3.0

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

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

func (*ExpansionRelayTerminal) Ctx added in v0.3.0

Ctx returns the relay terminal context.

func (*ExpansionRelayTerminal) Deliver added in v0.4.8

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

Deliver delivers a message to the relay terminal.

func (*ExpansionRelayTerminal) Flush added in v0.4.8

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

Flush writes all data in the queues.

func (*ExpansionRelayTerminal) FmtID added in v0.3.0

func (t *ExpansionRelayTerminal) FmtID() string

FmtID returns the expansion ID hierarchy.

func (*ExpansionRelayTerminal) HandleAbandon added in v0.6.0

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 added in v0.6.0

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 added in v0.3.0

ID returns the operation ID.

type ExpansionTerminal added in v0.3.0

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

ExpansionTerminal is used for expanding to another Hub.

func ExpandTo added in v0.3.0

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

ExpandTo initiates an expansion.

func (*ExpansionTerminal) CustomIDFormat added in v0.6.0

func (t *ExpansionTerminal) CustomIDFormat() string

CustomIDFormat formats the terminal ID.

func (*ExpansionTerminal) HandleDestruction added in v0.6.0

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 added in v0.6.2

func (t *ExpansionTerminal) MarkReachable()

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

func (*ExpansionTerminal) NeedsReachableCheck added in v0.6.2

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 added in v0.3.7

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

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

type ExpansionTerminalRelayOp added in v0.6.0

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

ExpansionTerminalRelayOp is the operation that connects to the relay.

func (*ExpansionTerminalRelayOp) Deliver added in v0.6.0

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

Deliver delivers a message to the operation.

func (*ExpansionTerminalRelayOp) HandleStop added in v0.6.0

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 added in v0.6.0

func (op *ExpansionTerminalRelayOp) Type() string

Type returns the type ID.

type LatencyTestClientOp added in v0.3.11

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

LatencyTestClientOp is the client version of LatencyTestOp.

func NewLatencyTestOp added in v0.3.11

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

NewLatencyTestOp runs a latency test.

func (*LatencyTestClientOp) Deliver added in v0.3.11

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

Deliver delivers a message to the operation.

func (*LatencyTestClientOp) HandleStop added in v0.6.0

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 added in v0.3.11

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

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

type LatencyTestOp added in v0.3.11

type LatencyTestOp struct {
	terminal.OperationBase
}

LatencyTestOp is used to measure latency.

func (*LatencyTestOp) Deliver added in v0.3.11

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

Deliver delivers a message to the operation.

func (*LatencyTestOp) Type added in v0.3.11

func (op *LatencyTestOp) Type() string

Type returns the type ID.

type NetworkOptimizationState added in v0.3.13

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

NetworkOptimizationState holds data for optimization purposes.

func (*NetworkOptimizationState) GetTrafficStats added in v0.3.14

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 added in v0.3.14

func (netState *NetworkOptimizationState) LapsePeriod()

LapsePeriod lapses the net state period, if needed.

func (*NetworkOptimizationState) ReportTraffic added in v0.3.14

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

ReportTraffic adds the reported transferred data to the traffic stats.

func (*NetworkOptimizationState) RequestStoppingSuggested added in v0.4.6

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

RequestStoppingSuggested returns whether the crane should request stopping.

func (*NetworkOptimizationState) StopSuggested added in v0.4.6

func (netState *NetworkOptimizationState) StopSuggested() bool

StopSuggested returns whether the crane should be stopped.

func (*NetworkOptimizationState) StoppingState added in v0.4.6

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

StoppingState returns when the stopping state.

func (*NetworkOptimizationState) StoppingSuggested added in v0.4.6

func (netState *NetworkOptimizationState) StoppingSuggested() bool

StoppingSuggested returns whether the crane should be marked as stopping.

func (*NetworkOptimizationState) UpdateLastSuggestedAt added in v0.3.13

func (netState *NetworkOptimizationState) UpdateLastSuggestedAt()

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

type SyncStateMessage added in v0.3.18

type SyncStateMessage struct {
	Stopping        bool
	RequestStopping bool
}

SyncStateMessage holds the sync data.

type SyncStateOp added in v0.3.18

type SyncStateOp struct {
	terminal.OneOffOperationBase
}

SyncStateOp is used to sync the crane state.

func (*SyncStateOp) Type added in v0.3.18

func (op *SyncStateOp) Type() string

Type returns the type ID.

type WhoAmIOp added in v0.7.0

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

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

func NewWhoAmIOp added in v0.7.0

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

NewWhoAmIOp starts a new whoami operation.

func (*WhoAmIOp) Deliver added in v0.7.0

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

Deliver delivers a message to the operation.

func (*WhoAmIOp) HandleStop added in v0.7.0

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 added in v0.7.0

func (op *WhoAmIOp) Type() string

Type returns the type ID.

type WhoAmIResponse added in v0.7.0

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 added in v0.7.0

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