Documentation ¶
Index ¶
- Constants
- Variables
- func AssignCrane(hubID string, crane *Crane)
- func GetAllAssignedCranes() map[string]*Crane
- func ImportAndVerifyHubInfo(ctx context.Context, hubID string, announcementData, statusData []byte, ...) (h *hub.Hub, forward bool, tErr *terminal.Error)
- func MeasureHub(ctx context.Context, h *hub.Hub, checkExpiryWith time.Duration) *terminal.Error
- func Ping(ctx context.Context, t terminal.OpTerminal, timeout time.Duration) (time.Duration, *terminal.Error)
- func RegisterCraneUpdateHook(fn func(crane *Crane))
- func ResetCraneUpdateHook()
- type CapacityTestOp
- type CapacityTestOptions
- type Crane
- func (crane *Crane) AbandonTerminal(id uint32, err *terminal.Error)
- func (crane *Crane) AbortStopping() (aborted bool)
- func (crane *Crane) Authenticated() bool
- func (crane *Crane) EstablishNewTerminal(localTerm terminal.TerminalInterface, initData *container.Container) *terminal.Error
- func (crane *Crane) IsMine() bool
- func (crane *Crane) IsStopping() bool
- func (crane *Crane) LocalAddr() net.Addr
- func (crane *Crane) MarkStopping() (stopping bool)
- func (crane *Crane) MarkStoppingRequested()
- func (crane *Crane) NotifyUpdate()
- func (crane *Crane) Public() bool
- func (crane *Crane) Publish() error
- func (crane *Crane) RemoteAddr() net.Addr
- func (crane *Crane) Start(callerCtx context.Context) error
- func (crane *Crane) Stop(err *terminal.Error)
- func (crane *Crane) Stopped() bool
- func (crane *Crane) String() string
- func (crane *Crane) Transport() *hub.Transport
- func (crane *Crane) VerifyConnectedHub(callerCtx context.Context) error
- type CraneControllerTerminal
- type CraneTerminal
- func (t *CraneTerminal) Abandon(err *terminal.Error)
- func (t *CraneTerminal) GrantPermission(grant terminal.Permission)
- func (t *CraneTerminal) IsBeingAbandoned() bool
- func (t *CraneTerminal) LocalAddr() net.Addr
- func (t *CraneTerminal) RemoteAddr() net.Addr
- func (t *CraneTerminal) Transport() *hub.Transport
- type ExpandOp
- func (op *ExpandOp) Abandon(err *terminal.Error)
- func (op *ExpandOp) Ctx() context.Context
- func (op *ExpandOp) Deliver(c *container.Container) *terminal.Error
- func (op *ExpandOp) DeliverHighPriority(c *container.Container) *terminal.Error
- func (op *ExpandOp) End(err *terminal.Error) (errorToSend *terminal.Error)
- func (op *ExpandOp) Flush()
- func (op *ExpandOp) FmtID() string
- func (op *ExpandOp) Type() string
- type ExpansionRelayTerminal
- func (t *ExpansionRelayTerminal) Abandon(err *terminal.Error)
- func (t *ExpansionRelayTerminal) Ctx() context.Context
- func (t *ExpansionRelayTerminal) Deliver(c *container.Container) *terminal.Error
- func (t *ExpansionRelayTerminal) DeliverHighPriority(c *container.Container) *terminal.Error
- func (t *ExpansionRelayTerminal) Flush()
- func (t *ExpansionRelayTerminal) FmtID() string
- func (t *ExpansionRelayTerminal) ID() uint32
- type ExpansionTerminal
- func (t *ExpansionTerminal) Abandon(err *terminal.Error)
- func (t *ExpansionTerminal) End(err *terminal.Error) (errorToSend *terminal.Error)
- func (t *ExpansionTerminal) FmtID() string
- func (t *ExpansionTerminal) HasEnded(end bool) bool
- func (t *ExpansionTerminal) ID() uint32
- func (t *ExpansionTerminal) IsBeingAbandoned() bool
- func (t *ExpansionTerminal) SetChangeNotifyFunc(f func())
- func (t *ExpansionTerminal) SetID(id uint32)
- func (t *ExpansionTerminal) Type() string
- type LatencyTestClientOp
- type LatencyTestOp
- type NetworkOptimizationState
- func (netState *NetworkOptimizationState) GetTrafficStats() (lifetimeBytesIn uint64, lifetimeBytesOut uint64, lifetimeStarted time.Time, ...)
- func (netState *NetworkOptimizationState) LapsePeriod()
- func (netState *NetworkOptimizationState) ReportTraffic(bytes uint64, in bool)
- func (netState *NetworkOptimizationState) RequestStoppingSuggested(maxNotSuggestedDuration time.Duration) bool
- func (netState *NetworkOptimizationState) StopSuggested() bool
- func (netState *NetworkOptimizationState) StoppingState() (requested, requestedByPeer bool, markedAt time.Time)
- func (netState *NetworkOptimizationState) StoppingSuggested() bool
- func (netState *NetworkOptimizationState) UpdateLastSuggestedAt()
- type SyncStateMessage
- type SyncStateOp
Constants ¶
const ( CraneMsgTypeEnd = 0 CraneMsgTypeInfo = 1 CraneMsgTypeRequestHubInfo = 2 CraneMsgTypeVerify = 3 CraneMsgTypeStartEncrypted = 4 CraneMsgTypeStartUnencrypted = 5 )
Crane Msg Types.
const ( CraneMeasurementTTLDefault = 30 * time.Minute CraneMeasurementTTLByCostBase = 1 * time.Minute CraneMeasurementTTLByCostMin = 30 * time.Minute CraneMeasurementTTLByCostMax = 3 * time.Hour )
Measurement Configuration.
const (
// CapacityTestOpType is the type ID of the capacity test operation.
CapacityTestOpType = "capacity"
)
const ExpandOpType string = "expand"
ExpandOpType is the type ID of the expand operation.
const (
// LatencyTestOpType is the type ID of the latency test operation.
LatencyTestOpType = "latency"
)
const NetStatePeriodInterval = 15 * time.Minute
NetStatePeriodInterval defines the interval some of the net state should be reset.
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"
)
const SyncStateOpType = "sync/state"
SyncStateOpType is the type ID of the sync state operation.
Variables ¶
var (
ErrDone = errors.New("crane is done")
)
Errors.
Functions ¶
func AssignCrane ¶
AssignCrane assigns a crane to the given Hub ID.
func GetAllAssignedCranes ¶ added in v0.3.5
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
MeasureHub measures the connection to this Hub and saves the results to the Hub.
func Ping ¶ added in v0.4.4
func Ping(ctx context.Context, t terminal.OpTerminal, timeout time.Duration) (time.Duration, *terminal.Error)
Ping sends a single ping and reports it's latency.
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
CapacityTestOp is used for capacity test operations.
func NewCapacityTestOp ¶ added in v0.3.11
func NewCapacityTestOp(t terminal.OpTerminal, opts *CapacityTestOptions) (*CapacityTestOp, *terminal.Error)
NewCapacityTestOp runs a capacity test.
func (*CapacityTestOp) Deliver ¶ added in v0.3.11
func (op *CapacityTestOp) Deliver(c *container.Container) *terminal.Error
Deliver delivers a message.
func (*CapacityTestOp) End ¶ added in v0.3.11
func (op *CapacityTestOp) End(tErr *terminal.Error) (errorToSend *terminal.Error)
End ends the operation.
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 ¶
GetAssignedCrane returns the assigned crane of the given Hub ID.
func (*Crane) AbandonTerminal ¶ added in v0.3.0
AbandonTerminal abandons the terminal with the given ID.
func (*Crane) AbortStopping ¶ added in v0.3.18
AbortStopping aborts the stopping.
func (*Crane) Authenticated ¶ added in v0.3.13
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.TerminalInterface, initData *container.Container, ) *terminal.Error
EstablishNewTerminal establishes a new terminal with the crane.
func (*Crane) IsStopping ¶ added in v0.3.18
IsStopping returns whether the crane is stopping.
func (*Crane) MarkStopping ¶ added in v0.3.18
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) RemoteAddr ¶ added in v0.3.0
RemoteAddr returns ship's local address.
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) Abandon ¶ added in v0.3.0
func (controller *CraneControllerTerminal) Abandon(err *terminal.Error)
Abandon abandons the crane controller.
type CraneTerminal ¶ added in v0.3.0
type CraneTerminal struct { *terminal.TerminalBase // 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, submitUpstream func(*container.Container, bool) *terminal.Error, ) (*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) Abandon ¶ added in v0.3.0
func (t *CraneTerminal) Abandon(err *terminal.Error)
Abandon abandons the 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) 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
ExpandOp is used to expand to another Hub.
func (*ExpandOp) DeliverHighPriority ¶ added in v0.4.14
DeliverHighPriority delivers a high priority message to the relay operation.
func (*ExpandOp) Flush ¶ added in v0.4.8
func (op *ExpandOp) Flush()
Flush writes all data in the queues.
type ExpansionRelayTerminal ¶ added in v0.3.0
type ExpansionRelayTerminal struct {
// 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 abandons the expansion.
func (*ExpansionRelayTerminal) Ctx ¶ added in v0.3.0
func (t *ExpansionRelayTerminal) Ctx() context.Context
Ctx returns the relay terminal context.
func (*ExpansionRelayTerminal) Deliver ¶ added in v0.4.8
func (t *ExpansionRelayTerminal) Deliver(c *container.Container) *terminal.Error
Deliver delivers a message to the relay terminal.
func (*ExpansionRelayTerminal) DeliverHighPriority ¶ added in v0.4.14
func (t *ExpansionRelayTerminal) DeliverHighPriority(c *container.Container) *terminal.Error
DeliverHighPriority delivers a high priority message to the relay terminal.
func (*ExpansionRelayTerminal) Flush ¶ added in v0.4.8
func (t *ExpansionRelayTerminal) Flush()
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) ID ¶ added in v0.3.0
func (t *ExpansionRelayTerminal) ID() uint32
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(t terminal.OpTerminal, routeTo string, encryptFor *hub.Hub) (*ExpansionTerminal, *terminal.Error)
ExpandTo initiates an expansion.
func (*ExpansionTerminal) Abandon ¶ added in v0.3.0
func (t *ExpansionTerminal) Abandon(err *terminal.Error)
Abandon ends the terminal.
func (*ExpansionTerminal) End ¶ added in v0.3.0
func (t *ExpansionTerminal) End(err *terminal.Error) (errorToSend *terminal.Error)
End ends the operation.
func (*ExpansionTerminal) FmtID ¶ added in v0.3.0
func (t *ExpansionTerminal) FmtID() string
FmtID formats the operation ID.
func (*ExpansionTerminal) HasEnded ¶ added in v0.3.0
func (t *ExpansionTerminal) HasEnded(end bool) bool
HasEnded returns whether the operation has ended.
func (*ExpansionTerminal) ID ¶ added in v0.3.0
func (t *ExpansionTerminal) ID() uint32
ID returns the operation ID.
func (*ExpansionTerminal) IsBeingAbandoned ¶ added in v0.4.4
func (t *ExpansionTerminal) IsBeingAbandoned() bool
IsBeingAbandoned returns whether the terminal is being abandoned.
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.
func (*ExpansionTerminal) SetID ¶ added in v0.3.0
func (t *ExpansionTerminal) SetID(id uint32)
SetID sets the operation ID.
func (*ExpansionTerminal) Type ¶ added in v0.3.0
func (t *ExpansionTerminal) 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.OpTerminal) (*LatencyTestClientOp, *terminal.Error)
NewLatencyTestOp runs a latency test.
func (*LatencyTestClientOp) Deliver ¶ added in v0.3.11
func (op *LatencyTestClientOp) Deliver(c *container.Container) *terminal.Error
Deliver delivers a message to the operation.
func (*LatencyTestClientOp) End ¶ added in v0.3.11
func (op *LatencyTestClientOp) End(tErr *terminal.Error) (errorToSend *terminal.Error)
End ends the operation.
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
LatencyTestOp is used to measure latency.
func (*LatencyTestOp) Deliver ¶ added in v0.3.11
func (op *LatencyTestOp) Deliver(c *container.Container) *terminal.Error
Deliver delivers a message to the operation.
func (*LatencyTestOp) End ¶ added in v0.3.11
func (op *LatencyTestOp) End(tErr *terminal.Error) (errorToSend *terminal.Error)
End ends 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
SyncStateMessage holds the sync data.
type SyncStateOp ¶ added in v0.3.18
SyncStateOp is used to sync the crane state.
func (*SyncStateOp) Deliver ¶ added in v0.3.18
func (op *SyncStateOp) Deliver(c *container.Container) *terminal.Error
Deliver delivers a message to the operation.
func (*SyncStateOp) End ¶ added in v0.3.18
func (op *SyncStateOp) End(tErr *terminal.Error) (errorToSend *terminal.Error)
End ends the operation.
func (*SyncStateOp) Type ¶ added in v0.3.18
func (op *SyncStateOp) Type() string
Type returns the type ID.