Documentation ¶
Index ¶
- Constants
- Variables
- func EnableMasking(salt []byte)
- func GetVirtualNetworkAddress(dstHubID string) net.IP
- func GetVirtualNetworkConfig() *hub.VirtualNetworkConfig
- func Protocols() []string
- func Register(protocol string, builder *Builder)
- func ServeInfoPage(w http.ResponseWriter, r *http.Request)
- func SetVirtualNetworkConfig(config *hub.VirtualNetworkConfig)
- type Builder
- type DockingRequest
- type HTTPPier
- type HTTPShip
- type KCPPier
- type KCPShip
- type Pier
- type PierBase
- type Ship
- type ShipBase
- func (ship *ShipBase) IsMine() bool
- func (ship *ShipBase) IsSecure() bool
- func (ship *ShipBase) Load(data []byte) error
- func (ship *ShipBase) LoadSize() int
- func (ship *ShipBase) LocalAddr() net.Addr
- func (ship *ShipBase) MarkPublic()
- func (ship *ShipBase) Mask(value []byte) string
- func (ship *ShipBase) MaskAddress(addr net.Addr) string
- func (ship *ShipBase) MaskIP(ip net.IP) string
- func (ship *ShipBase) Public() bool
- func (ship *ShipBase) RemoteAddr() net.Addr
- func (ship *ShipBase) Sink()
- func (ship *ShipBase) String() string
- func (ship *ShipBase) Transport() *hub.Transport
- func (ship *ShipBase) UnloadTo(buf []byte) (n int, err error)
- type TCPPier
- type TCPShip
- type TestShip
- func (ship *TestShip) IsMine() bool
- func (ship *TestShip) IsSecure() bool
- func (ship *TestShip) Load(data []byte) error
- func (ship *TestShip) LoadSize() int
- func (ship *TestShip) LocalAddr() net.Addr
- func (ship *TestShip) MarkPublic()
- func (ship *TestShip) Mask(value []byte) string
- func (ship *TestShip) MaskAddress(addr net.Addr) string
- func (ship *TestShip) MaskIP(ip net.IP) string
- func (ship *TestShip) Public() bool
- func (ship *TestShip) RemoteAddr() net.Addr
- func (ship *TestShip) Reverse() *TestShip
- func (ship *TestShip) Sink()
- func (ship *TestShip) String() string
- func (ship *TestShip) Transport() *hub.Transport
- func (ship *TestShip) UnloadTo(buf []byte) (n int, err error)
Constants ¶
const ( BaseMTU = 1460 // 1500 with 40 bytes extra space for special cases. IPv4HeaderMTUSize = 20 // Without options, as not common. IPv6HeaderMTUSize = 40 // Without options, as not common. TCPHeaderMTUSize = 60 // Maximum size with options. UDPHeaderMTUSize = 8 // Has no options. )
MTU Calculation Configuration.
Variables ¶
var ( // DisplayHubID holds the Hub ID for displaying it on the info page. DisplayHubID string )
var ErrSunk = errors.New("ship sunk")
ErrSunk is returned when a ship sunk, ie. the connection was lost.
Functions ¶
func EnableMasking ¶
func EnableMasking(salt []byte)
EnableMasking enables masking with the given salt.
func GetVirtualNetworkAddress ¶
GetVirtualNetworkAddress returns the virtual network IP for the given Hub.
func GetVirtualNetworkConfig ¶
func GetVirtualNetworkConfig() *hub.VirtualNetworkConfig
GetVirtualNetworkConfig returns the virtual networking config.
func Protocols ¶
func Protocols() []string
Protocols returns a slice with all registered protocol names. The return slice must not be edited.
func ServeInfoPage ¶
func ServeInfoPage(w http.ResponseWriter, r *http.Request)
ServeInfoPage serves the info page for the given request.
func SetVirtualNetworkConfig ¶
func SetVirtualNetworkConfig(config *hub.VirtualNetworkConfig)
SetVirtualNetworkConfig sets the virtual networking config.
Types ¶
type Builder ¶
type Builder struct { LaunchShip func(ctx context.Context, transport *hub.Transport, ip net.IP) (Ship, error) EstablishPier func(transport *hub.Transport, dockingRequests chan Ship) (Pier, error) }
Builder is a factory that can build ships and piers of it's protocol.
func GetBuilder ¶
GetBuilder returns the builder for the given protocol, or nil if it does not exist.
type DockingRequest ¶
DockingRequest is a uniform request that Piers emit when a new ship arrives.
type HTTPPier ¶
type HTTPPier struct { PierBase // contains filtered or unexported fields }
HTTPPier is a pier that uses HTTP.
type Pier ¶
type Pier interface { // String returns a human readable informational summary about the ship. String() string // Transport returns the transport used for this ship. Transport() *hub.Transport // Abolish closes the underlying listener and cleans up any related resources. Abolish() }
Pier represents a network connection listener.
type PierBase ¶
type PierBase struct {
// contains filtered or unexported fields
}
PierBase implements common functions to comply with the Pier interface.
func (*PierBase) Abolish ¶
func (pier *PierBase) Abolish()
Abolish closes the underlying listener and cleans up any related resources.
type Ship ¶
type Ship interface { // String returns a human readable informational summary about the ship. String() string // Transport returns the transport used for this ship. Transport() *hub.Transport // IsMine returns whether the ship was launched from here. IsMine() bool // IsSecure returns whether the ship provides transport security. IsSecure() bool // Public returns whether the ship is marked as public. Public() bool // MarkPublic marks the ship as public. MarkPublic() // LoadSize returns the recommended data size that should be handed to Load(). // This value will be most likely somehow related to the connection's MTU. // Alternatively, using a multiple of LoadSize is also recommended. LoadSize() int // Load loads data into the ship - ie. sends the data via the connection. // Returns ErrSunk if the ship has already sunk earlier. Load(data []byte) error // UnloadTo unloads data from the ship - ie. receives data from the // connection - puts it into the buf. It returns the amount of data // written and an optional error. // Returns ErrSunk if the ship has already sunk earlier. UnloadTo(buf []byte) (n int, err error) // LocalAddr returns the underlying local net.Addr of the connection. LocalAddr() net.Addr // RemoteAddr returns the underlying remote net.Addr of the connection. RemoteAddr() net.Addr // Sink closes the underlying connection and cleans up any related resources. Sink() // MaskAddress masks the address, if enabled. MaskAddress(addr net.Addr) string // MaskIP masks an IP, if enabled. MaskIP(ip net.IP) string // Mask masks a value. Mask(value []byte) string }
Ship represents a network layer connection.
type ShipBase ¶
type ShipBase struct {
// contains filtered or unexported fields
}
ShipBase implements common functions to comply with the Ship interface.
func (*ShipBase) Load ¶
Load loads data into the ship - ie. sends the data via the connection. Returns ErrSunk if the ship has already sunk earlier.
func (*ShipBase) LoadSize ¶
LoadSize returns the recommended data size that should be handed to Load(). This value will be most likely somehow related to the connection's MTU. Alternatively, using a multiple of LoadSize is also recommended.
func (*ShipBase) MarkPublic ¶
func (ship *ShipBase) MarkPublic()
MarkPublic marks the ship as public.
func (*ShipBase) MaskAddress ¶
MaskAddress masks the given address if masking is enabled and the ship is not public.
func (*ShipBase) MaskIP ¶
MaskIP masks the given IP if masking is enabled and the ship is not public.
func (*ShipBase) RemoteAddr ¶
RemoteAddr returns the underlying remote net.Addr of the connection.
func (*ShipBase) Sink ¶
func (ship *ShipBase) Sink()
Sink closes the underlying connection and cleans up any related resources.
type TCPPier ¶
type TCPPier struct { PierBase // contains filtered or unexported fields }
TCPPier is a pier that uses TCP.
type TestShip ¶
type TestShip struct {
// contains filtered or unexported fields
}
TestShip is a simulated ship that is used for testing higher level components.
func NewTestShip ¶
NewTestShip returns a new TestShip for simulation.
func (*TestShip) Load ¶
Load loads data into the ship - ie. sends the data via the connection. Returns ErrSunk if the ship has already sunk earlier.
func (*TestShip) LoadSize ¶
LoadSize returns the recommended data size that should be handed to Load(). This value will be most likely somehow related to the connection's MTU. Alternatively, using a multiple of LoadSize is also recommended.
func (*TestShip) MarkPublic ¶
func (ship *TestShip) MarkPublic()
func (*TestShip) RemoteAddr ¶
func (*TestShip) Reverse ¶
Reverse creates a connected TestShip. This is used to simulate a connection instead of using a Pier.
func (*TestShip) Sink ¶
func (ship *TestShip) Sink()
Sink closes the underlying connection and cleans up any related resources.