Documentation ¶
Index ¶
- Constants
- Variables
- type Config
- func (*Config) Descriptor() ([]byte, []int)
- func (c *Config) EqualsConfig(other config.Config) bool
- func (c *Config) GetConfigID() string
- func (c *Config) GetDebugVals() config.DebugValues
- func (m *Config) GetDialers() map[string]*dialer.DialerOpts
- func (m *Config) GetListenAddr() string
- func (m *Config) GetQuic() *quic.Opts
- func (m *Config) GetRestrictPeerId() string
- func (m *Config) GetTransportPeerId() string
- func (c *Config) ParseNodePeerID() (peer.ID, error)
- func (c *Config) ParseRestrictPeerID() (peer.ID, error)
- func (*Config) ProtoMessage()
- func (m *Config) Reset()
- func (c *Config) SetTransportPeerId(peerID string)
- func (m *Config) String() string
- func (c *Config) Validate() error
- func (m *Config) XXX_DiscardUnknown()
- func (m *Config) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *Config) XXX_Merge(src proto.Message)
- func (m *Config) XXX_Size() int
- func (m *Config) XXX_Unmarshal(b []byte) error
- type Factory
- type Link
- type PacketConn
- func (c *PacketConn) Close() error
- func (c *PacketConn) LocalAddr() net.Addr
- func (c *PacketConn) ReadFrom(p []byte) (n int, addr net.Addr, err error)
- func (c *PacketConn) ReadMessage() ([]byte, error)
- func (c *PacketConn) SetDeadline(t time.Time) error
- func (c *PacketConn) SetReadDeadline(t time.Time) error
- func (c *PacketConn) SetWriteDeadline(t time.Time) error
- func (c *PacketConn) WriteMessage(msg []byte) error
- func (c *PacketConn) WriteTo(p []byte, addr net.Addr) (n int, err error)
- type WebSocket
Constants ¶
const ConfigID = ControllerID
ConfigID is the string used to identify this config object.
const ControllerID = "bifrost/websocket/1"
ControllerID is the WebSocket controller ID.
const TransportID = "websocket"
TransportID is the transport identifier
Variables ¶
var Version = semver.MustParse("0.0.1")
Version is the version of the implementation.
Functions ¶
This section is empty.
Types ¶
type Config ¶
type Config struct { // TransportPeerID sets the peer ID to attach the transport to. // If unset, attaches to any running peer with a private key. TransportPeerId string `protobuf:"bytes,1,opt,name=transport_peer_id,json=transportPeerId,proto3" json:"transport_peer_id,omitempty"` // ListenAddr contains the address to listen on. // Has no effect in the browser. ListenAddr string `protobuf:"bytes,2,opt,name=listen_addr,json=listenAddr,proto3" json:"listen_addr,omitempty"` // QuicOpts are the quic protocol options. // // The WebSocket transport always disables FEC and several other UDP-centric // features which are unnecessary due to the "reliable" nature of WebSockets. Quic *quic.Opts `protobuf:"bytes,3,opt,name=quic,proto3" json:"quic,omitempty"` // Dialers maps peer IDs to dialers. Dialers map[string]*dialer.DialerOpts `` /* 155-byte string literal not displayed */ // RestrictPeerId restricts all incoming peer IDs to the given ID. // Any other peers trying to connect will be disconneted at handshake time. RestrictPeerId string `protobuf:"bytes,5,opt,name=restrict_peer_id,json=restrictPeerId,proto3" json:"restrict_peer_id,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` }
Config is the configuration for the Websocket transport.
Bifrost speaks Quic over the websocket. While this is not always necessary, especially when using wss transports, we still need to ensure end-to-end encryption to the peer that we handshake with on the other end, and to manage stream congestion control, multiplexing,
func (*Config) Descriptor ¶
func (*Config) EqualsConfig ¶
EqualsConfig checks if the other config is equal.
func (*Config) GetConfigID ¶
GetConfigID returns the unique string for this configuration type. This string is stored with the encoded config.
func (*Config) GetDebugVals ¶
func (c *Config) GetDebugVals() config.DebugValues
GetDebugVals returns the directive arguments as key/value pairs. This should be something like param1="test", param2="test". This is not necessarily unique, and is primarily intended for display.
func (*Config) GetDialers ¶
func (m *Config) GetDialers() map[string]*dialer.DialerOpts
func (*Config) GetListenAddr ¶
func (*Config) GetRestrictPeerId ¶
func (*Config) GetTransportPeerId ¶
func (*Config) ParseNodePeerID ¶
ParseNodePeerID parses the node peer ID if it is not empty.
func (*Config) ParseRestrictPeerID ¶
ParseRestrictPeerID parses the remote peer ID restriction if it is not empty.
func (*Config) ProtoMessage ¶
func (*Config) ProtoMessage()
func (*Config) SetTransportPeerId ¶
SetTransportPeerId sets the node peer ID field.
func (*Config) Validate ¶
Validate validates the configuration. This is a cursory validation to see if the values "look correct."
func (*Config) XXX_DiscardUnknown ¶
func (m *Config) XXX_DiscardUnknown()
func (*Config) XXX_Marshal ¶
func (*Config) XXX_Unmarshal ¶
type Factory ¶
type Factory struct {
// contains filtered or unexported fields
}
Factory constructs a WebSocket transport.
func (*Factory) Construct ¶
func (t *Factory) Construct( conf config.Config, opts controller.ConstructOpts, ) (controller.Controller, error)
Construct constructs the associated controller given configuration. The transport's identity (private key) comes from a GetNode lookup.
func (*Factory) ConstructConfig ¶
ConstructConfig constructs an instance of the controller configuration.
func (*Factory) GetConfigID ¶
GetConfigID returns the configuration ID for the controller.
func (*Factory) GetControllerID ¶
GetControllerID returns the unique ID for the controller.
func (*Factory) GetVersion ¶
GetVersion returns the version of this controller.
type PacketConn ¶
type PacketConn struct {
// contains filtered or unexported fields
}
PacketConn implements the PacketConn interface with a websocket.
func NewPacketConn ¶
NewPacketConn constructs a new packet conn from a WebSocket conn.
func (*PacketConn) LocalAddr ¶
func (c *PacketConn) LocalAddr() net.Addr
LocalAddr returns the local network address.
func (*PacketConn) ReadMessage ¶
func (c *PacketConn) ReadMessage() ([]byte, error)
ReadMessage reads a single message from the connection.
func (*PacketConn) SetDeadline ¶
func (c *PacketConn) SetDeadline(t time.Time) error
SetDeadline sets the read and write deadlines associated with the connection. It is equivalent to calling both SetReadDeadline and SetWriteDeadline.
A deadline is an absolute time after which I/O operations fail instead of blocking. The deadline applies to all future and pending I/O, not just the immediately following call to Read or Write. After a deadline has been exceeded, the connection can be refreshed by setting a deadline in the future.
If the deadline is exceeded a call to Read or Write or to other I/O methods will return an error that wraps os.ErrDeadlineExceeded. This can be tested using errors.Is(err, os.ErrDeadlineExceeded). The error's Timeout method will return true, but note that there are other possible errors for which the Timeout method will return true even if the deadline has not been exceeded.
An idle timeout can be implemented by repeatedly extending the deadline after successful ReadFrom or WriteTo calls.
A zero value for t means I/O operations will not time out.
func (*PacketConn) SetReadDeadline ¶
func (c *PacketConn) SetReadDeadline(t time.Time) error
SetReadDeadline sets the deadline for future ReadFrom calls and any currently-blocked ReadFrom call. A zero value for t means ReadFrom will not time out.
func (*PacketConn) SetWriteDeadline ¶
func (c *PacketConn) SetWriteDeadline(t time.Time) error
SetWriteDeadline sets the deadline for future WriteTo calls and any currently-blocked WriteTo call. Even if write times out, it may return n > 0, indicating that some of the data was successfully written. A zero value for t means WriteTo will not time out.
func (*PacketConn) WriteMessage ¶
func (c *PacketConn) WriteMessage(msg []byte) error
WriteMessage writes a single message to the connection.
type WebSocket ¶
type WebSocket struct { // Transport implements the quic-backed transport type *transport_quic.Transport // contains filtered or unexported fields }
WebSocket implements a WebSocket transport.
func NewWebSocket ¶
func NewWebSocket( ctx context.Context, le *logrus.Entry, conf *Config, pKey crypto.PrivKey, c transport.TransportHandler, ) (*WebSocket, error)
NewWebSocket builds a new WebSocket transport.
ServeHTTP is implemented and can be used with a standard HTTP mux. Optionally listens on an address.
func (*WebSocket) Execute ¶
Execute executes the transport as configured, returning any fatal error.
func (*WebSocket) ListenHTTP ¶
ListenHTTP listens for incoming HTTP connections on an address.