Documentation
¶
Index ¶
- Constants
- func DiscoveryReportJSON(report *DiscoveryReport) string
- func GetDefaultConfigPath() (string, error)
- func IsRetryableError(err error) bool
- type Bridge
- type CheckingTokenState
- func (s *CheckingTokenState) Connect(*Conn) error
- func (s *CheckingTokenState) HandleBridgeData(*Conn, *shared.BridgeDataMessage) error
- func (s *CheckingTokenState) HandleCloseBridge(*Conn, *shared.CloseBridgeRequest) error
- func (s *CheckingTokenState) HandleOpenBridge(*Conn, *shared.OpenBridgeRequest) error
- func (s *CheckingTokenState) Name() string
- func (s *CheckingTokenState) OnNewTokenResponse(*Conn, *shared.NewTokenResponse) error
- func (s *CheckingTokenState) OnRegisterResponse(*Conn, *shared.RegisterResponse) error
- func (s *CheckingTokenState) OnTokenCheckResponse(c *Conn, r *shared.TokenCheckResponse) error
- type ClosedState
- func (s *ClosedState) Connect(*Conn) error
- func (s *ClosedState) HandleBridgeData(*Conn, *shared.BridgeDataMessage) error
- func (s *ClosedState) HandleCloseBridge(*Conn, *shared.CloseBridgeRequest) error
- func (s *ClosedState) HandleOpenBridge(*Conn, *shared.OpenBridgeRequest) error
- func (s *ClosedState) Name() string
- func (s *ClosedState) OnNewTokenResponse(*Conn, *shared.NewTokenResponse) error
- func (s *ClosedState) OnRegisterResponse(*Conn, *shared.RegisterResponse) error
- func (s *ClosedState) OnTokenCheckResponse(*Conn, *shared.TokenCheckResponse) error
- type Config
- type ConfigFile
- type Conn
- type ConnState
- type DisconnectedState
- func (s *DisconnectedState) Connect(c *Conn) error
- func (s *DisconnectedState) HandleBridgeData(*Conn, *shared.BridgeDataMessage) error
- func (s *DisconnectedState) HandleCloseBridge(*Conn, *shared.CloseBridgeRequest) error
- func (s *DisconnectedState) HandleOpenBridge(*Conn, *shared.OpenBridgeRequest) error
- func (s *DisconnectedState) Name() string
- func (s *DisconnectedState) OnNewTokenResponse(*Conn, *shared.NewTokenResponse) error
- func (s *DisconnectedState) OnRegisterResponse(*Conn, *shared.RegisterResponse) error
- func (s *DisconnectedState) OnTokenCheckResponse(*Conn, *shared.TokenCheckResponse) error
- type DiscoveredService
- type DiscoveryHost
- type DiscoveryOptions
- type DiscoveryPort
- type DiscoveryReport
- type DiscoveryScanMeta
- type MessageTransport
- type ReconnectConf
- type Reconnector
- type RegisteredState
- func (s *RegisteredState) Connect(*Conn) error
- func (s *RegisteredState) HandleBridgeData(c *Conn, m *shared.BridgeDataMessage) error
- func (s *RegisteredState) HandleCloseBridge(c *Conn, r *shared.CloseBridgeRequest) error
- func (s *RegisteredState) HandleOpenBridge(c *Conn, r *shared.OpenBridgeRequest) error
- func (s *RegisteredState) Name() string
- func (s *RegisteredState) OnNewTokenResponse(*Conn, *shared.NewTokenResponse) error
- func (s *RegisteredState) OnRegisterResponse(*Conn, *shared.RegisterResponse) error
- func (s *RegisteredState) OnTokenCheckResponse(*Conn, *shared.TokenCheckResponse) error
- type RegisteringState
- func (s *RegisteringState) Connect(*Conn) error
- func (s *RegisteringState) HandleBridgeData(*Conn, *shared.BridgeDataMessage) error
- func (s *RegisteringState) HandleCloseBridge(*Conn, *shared.CloseBridgeRequest) error
- func (s *RegisteringState) HandleOpenBridge(*Conn, *shared.OpenBridgeRequest) error
- func (s *RegisteringState) Name() string
- func (s *RegisteringState) OnNewTokenResponse(*Conn, *shared.NewTokenResponse) error
- func (s *RegisteringState) OnRegisterResponse(c *Conn, r *shared.RegisterResponse) error
- func (s *RegisteringState) OnTokenCheckResponse(*Conn, *shared.TokenCheckResponse) error
- type RequestingTokenState
- func (s *RequestingTokenState) Connect(*Conn) error
- func (s *RequestingTokenState) HandleBridgeData(*Conn, *shared.BridgeDataMessage) error
- func (s *RequestingTokenState) HandleCloseBridge(*Conn, *shared.CloseBridgeRequest) error
- func (s *RequestingTokenState) HandleOpenBridge(*Conn, *shared.OpenBridgeRequest) error
- func (s *RequestingTokenState) Name() string
- func (s *RequestingTokenState) OnNewTokenResponse(c *Conn, r *shared.NewTokenResponse) error
- func (s *RequestingTokenState) OnRegisterResponse(*Conn, *shared.RegisterResponse) error
- func (s *RequestingTokenState) OnTokenCheckResponse(*Conn, *shared.TokenCheckResponse) error
- type WebSocketConn
- func (w *WebSocketConn) Close() error
- func (w *WebSocketConn) LocalAddr() string
- func (w *WebSocketConn) ReadMessage() (any, error)
- func (w *WebSocketConn) RemoteAddr() string
- func (w *WebSocketConn) SetPingHandler(h func(appData string) error)
- func (w *WebSocketConn) SetPongHandler(h func(appData string) error)
- func (w *WebSocketConn) SetReadDeadline(t time.Time) error
- func (w *WebSocketConn) UnderlyingConn() *websocket.Conn
- func (w *WebSocketConn) WriteMessage(msg any) error
Constants ¶
const MaxMessageSize = 16 * 1024 * 1024 // 16 MB
Variables ¶
This section is empty.
Functions ¶
func DiscoveryReportJSON ¶
func DiscoveryReportJSON(report *DiscoveryReport) string
DiscoveryReportJSON returns pretty JSON for CLI output.
func GetDefaultConfigPath ¶
GetDefaultConfigPath returns the default config file path
func IsRetryableError ¶
IsRetryableError determines if an error should trigger a reconnection attempt
Types ¶
type Bridge ¶
type Bridge struct {
ID string
ServiceID string
Addr string
Port int
Path string
Conn net.Conn
// contains filtered or unexported fields
}
Bridge represents an active bridge from node to service
type CheckingTokenState ¶
type CheckingTokenState struct {
// contains filtered or unexported fields
}
func NewCheckingTokenState ¶
func NewCheckingTokenState() *CheckingTokenState
func (*CheckingTokenState) HandleBridgeData ¶
func (s *CheckingTokenState) HandleBridgeData(*Conn, *shared.BridgeDataMessage) error
func (*CheckingTokenState) HandleCloseBridge ¶
func (s *CheckingTokenState) HandleCloseBridge(*Conn, *shared.CloseBridgeRequest) error
func (*CheckingTokenState) HandleOpenBridge ¶
func (s *CheckingTokenState) HandleOpenBridge(*Conn, *shared.OpenBridgeRequest) error
func (*CheckingTokenState) OnNewTokenResponse ¶
func (s *CheckingTokenState) OnNewTokenResponse(*Conn, *shared.NewTokenResponse) error
func (*CheckingTokenState) OnRegisterResponse ¶
func (s *CheckingTokenState) OnRegisterResponse(*Conn, *shared.RegisterResponse) error
func (*CheckingTokenState) OnTokenCheckResponse ¶
func (s *CheckingTokenState) OnTokenCheckResponse(c *Conn, r *shared.TokenCheckResponse) error
type ClosedState ¶
type ClosedState struct {
// contains filtered or unexported fields
}
func NewClosedState ¶
func NewClosedState() *ClosedState
func (*ClosedState) HandleBridgeData ¶
func (s *ClosedState) HandleBridgeData(*Conn, *shared.BridgeDataMessage) error
func (*ClosedState) HandleCloseBridge ¶
func (s *ClosedState) HandleCloseBridge(*Conn, *shared.CloseBridgeRequest) error
func (*ClosedState) HandleOpenBridge ¶
func (s *ClosedState) HandleOpenBridge(*Conn, *shared.OpenBridgeRequest) error
func (*ClosedState) OnNewTokenResponse ¶
func (s *ClosedState) OnNewTokenResponse(*Conn, *shared.NewTokenResponse) error
func (*ClosedState) OnRegisterResponse ¶
func (s *ClosedState) OnRegisterResponse(*Conn, *shared.RegisterResponse) error
func (*ClosedState) OnTokenCheckResponse ¶
func (s *ClosedState) OnTokenCheckResponse(*Conn, *shared.TokenCheckResponse) error
type Config ¶
type Config struct {
RelayAddress string `json:"relay_address"`
NodeID string `json:"node_id"`
Token string `json:"token"`
Reconnect ReconnectConf `json:"reconnect"`
}
Config represents the v2 node configuration
type ConfigFile ¶
ConfigFile bundles a config with its file path
func Load ¶
func Load(customPath string) (*ConfigFile, error)
Load creates a ConfigFile, resolving default path if customPath is empty If the file doesn't exist, creates a new config with a generated node ID
func (*ConfigFile) Delete ¶
func (cf *ConfigFile) Delete() error
Delete removes the config file after confirmation
func (*ConfigFile) Logout ¶
func (cf *ConfigFile) Logout() error
Logout clears the token from config and saves
type Conn ¶
type Conn struct {
// contains filtered or unexported fields
}
Conn manages the connection to the server
func (*Conn) CloseAllBridges ¶
func (*Conn) CloseBridge ¶
type ConnState ¶
type ConnState interface {
Name() string
Connect(*Conn) error
OnTokenCheckResponse(*Conn, *shared.TokenCheckResponse) error
OnNewTokenResponse(*Conn, *shared.NewTokenResponse) error
OnRegisterResponse(*Conn, *shared.RegisterResponse) error
HandleOpenBridge(*Conn, *shared.OpenBridgeRequest) error
HandleBridgeData(*Conn, *shared.BridgeDataMessage) error
HandleCloseBridge(*Conn, *shared.CloseBridgeRequest) error
}
ConnState interface defines all possible operations
type DisconnectedState ¶
type DisconnectedState struct {
// contains filtered or unexported fields
}
func NewDisconnectedState ¶
func NewDisconnectedState() *DisconnectedState
func (*DisconnectedState) Connect ¶
func (s *DisconnectedState) Connect(c *Conn) error
func (*DisconnectedState) HandleBridgeData ¶
func (s *DisconnectedState) HandleBridgeData(*Conn, *shared.BridgeDataMessage) error
func (*DisconnectedState) HandleCloseBridge ¶
func (s *DisconnectedState) HandleCloseBridge(*Conn, *shared.CloseBridgeRequest) error
func (*DisconnectedState) HandleOpenBridge ¶
func (s *DisconnectedState) HandleOpenBridge(*Conn, *shared.OpenBridgeRequest) error
func (*DisconnectedState) OnNewTokenResponse ¶
func (s *DisconnectedState) OnNewTokenResponse(*Conn, *shared.NewTokenResponse) error
func (*DisconnectedState) OnRegisterResponse ¶
func (s *DisconnectedState) OnRegisterResponse(*Conn, *shared.RegisterResponse) error
func (*DisconnectedState) OnTokenCheckResponse ¶
func (s *DisconnectedState) OnTokenCheckResponse(*Conn, *shared.TokenCheckResponse) error
type DiscoveredService ¶
type DiscoveredService struct {
Type string `json:"type"` // rtsp|rtsp_locked|rtsp_unknown|rtsp_unsupported|http|mjpeg|mjpeg_locked|tcp
IP string `json:"ip"`
MAC string `json:"mac,omitempty"`
Port int `json:"port"`
Path string `json:"path,omitempty"`
URL string `json:"url,omitempty"`
}
DiscoveredService represents one discovered service.
type DiscoveryHost ¶
type DiscoveryHost struct {
IP string `json:"ip"`
MAC string `json:"mac,omitempty"`
ARP bool `json:"arp,omitempty"`
ICMP bool `json:"icmp,omitempty"`
}
DiscoveryHost represents one discovered host.
type DiscoveryOptions ¶
type DiscoveryOptions struct {
Timeout time.Duration
DialTimeout time.Duration
ProbeTimeout time.Duration
RequestTimeout time.Duration
MaxHosts int
Workers int
IncludeHTTP bool
Debug bool
InterfaceWhitelist []string
}
DiscoveryOptions controls network scanner behavior.
type DiscoveryPort ¶
type DiscoveryPort struct {
IP string `json:"ip"`
MAC string `json:"mac,omitempty"`
Port int `json:"port"`
}
DiscoveryPort represents one open candidate port.
type DiscoveryReport ¶
type DiscoveryReport struct {
StartedAt string `json:"started_at"`
DurationMs int64 `json:"duration_ms"`
Networks []string `json:"networks"`
Hosts []DiscoveryHost `json:"hosts,omitempty"`
Ports []DiscoveryPort `json:"ports,omitempty"`
Services []DiscoveredService `json:"services,omitempty"`
ScanMeta DiscoveryScanMeta `json:"scan_meta,omitempty"`
}
DiscoveryReport is the discovery result.
func DiscoverCameras ¶
func DiscoverCameras(ctx context.Context, opts DiscoveryOptions) (*DiscoveryReport, error)
DiscoverCameras scans local networks for RTSP/MJPEG-like camera services.
type DiscoveryScanMeta ¶
type DiscoveryScanMeta struct {
Interfaces []string `json:"interfaces,omitempty"`
HostCandidates int `json:"host_candidates,omitempty"`
ARPHosts int `json:"arp_hosts,omitempty"`
ICMPHosts int `json:"icmp_hosts,omitempty"`
LiveHosts int `json:"live_hosts,omitempty"`
TCPProbes int `json:"tcp_probes,omitempty"`
OpenPorts int `json:"open_ports,omitempty"`
RTSPServices int `json:"rtsp_services,omitempty"`
HTTPServices int `json:"http_services,omitempty"`
MJPEGServices int `json:"mjpeg_services,omitempty"`
StageMs map[string]int64 `json:"stage_ms,omitempty"`
}
DiscoveryScanMeta contains stage counters and durations.
type MessageTransport ¶
type MessageTransport interface {
ReadMessage() (any, error)
WriteMessage(any) error
Close() error
}
MessageTransport defines the interface for reading/writing messages
type ReconnectConf ¶
type ReconnectConf struct {
Enabled bool `json:"enabled"`
}
ReconnectConf defines reconnection behavior
type Reconnector ¶
type Reconnector struct {
// contains filtered or unexported fields
}
Reconnector handles automatic reconnection with exponential backoff
func NewReconnector ¶
func NewReconnector(configFile *ConfigFile) *Reconnector
NewReconnector creates a new reconnector with the given config
func (*Reconnector) Run ¶
func (r *Reconnector) Run(createConn func() *Conn)
Run runs the node connection with automatic reconnection
type RegisteredState ¶
type RegisteredState struct {
// contains filtered or unexported fields
}
func NewRegisteredState ¶
func NewRegisteredState() *RegisteredState
func (*RegisteredState) HandleBridgeData ¶
func (s *RegisteredState) HandleBridgeData(c *Conn, m *shared.BridgeDataMessage) error
func (*RegisteredState) HandleCloseBridge ¶
func (s *RegisteredState) HandleCloseBridge(c *Conn, r *shared.CloseBridgeRequest) error
func (*RegisteredState) HandleOpenBridge ¶
func (s *RegisteredState) HandleOpenBridge(c *Conn, r *shared.OpenBridgeRequest) error
func (*RegisteredState) OnNewTokenResponse ¶
func (s *RegisteredState) OnNewTokenResponse(*Conn, *shared.NewTokenResponse) error
func (*RegisteredState) OnRegisterResponse ¶
func (s *RegisteredState) OnRegisterResponse(*Conn, *shared.RegisterResponse) error
func (*RegisteredState) OnTokenCheckResponse ¶
func (s *RegisteredState) OnTokenCheckResponse(*Conn, *shared.TokenCheckResponse) error
type RegisteringState ¶
type RegisteringState struct {
// contains filtered or unexported fields
}
func NewRegisteringState ¶
func NewRegisteringState() *RegisteringState
func (*RegisteringState) HandleBridgeData ¶
func (s *RegisteringState) HandleBridgeData(*Conn, *shared.BridgeDataMessage) error
func (*RegisteringState) HandleCloseBridge ¶
func (s *RegisteringState) HandleCloseBridge(*Conn, *shared.CloseBridgeRequest) error
func (*RegisteringState) HandleOpenBridge ¶
func (s *RegisteringState) HandleOpenBridge(*Conn, *shared.OpenBridgeRequest) error
func (*RegisteringState) OnNewTokenResponse ¶
func (s *RegisteringState) OnNewTokenResponse(*Conn, *shared.NewTokenResponse) error
func (*RegisteringState) OnRegisterResponse ¶
func (s *RegisteringState) OnRegisterResponse(c *Conn, r *shared.RegisterResponse) error
func (*RegisteringState) OnTokenCheckResponse ¶
func (s *RegisteringState) OnTokenCheckResponse(*Conn, *shared.TokenCheckResponse) error
type RequestingTokenState ¶
type RequestingTokenState struct {
// contains filtered or unexported fields
}
func NewRequestingTokenState ¶
func NewRequestingTokenState() *RequestingTokenState
func (*RequestingTokenState) HandleBridgeData ¶
func (s *RequestingTokenState) HandleBridgeData(*Conn, *shared.BridgeDataMessage) error
func (*RequestingTokenState) HandleCloseBridge ¶
func (s *RequestingTokenState) HandleCloseBridge(*Conn, *shared.CloseBridgeRequest) error
func (*RequestingTokenState) HandleOpenBridge ¶
func (s *RequestingTokenState) HandleOpenBridge(*Conn, *shared.OpenBridgeRequest) error
func (*RequestingTokenState) OnNewTokenResponse ¶
func (s *RequestingTokenState) OnNewTokenResponse(c *Conn, r *shared.NewTokenResponse) error
func (*RequestingTokenState) OnRegisterResponse ¶
func (s *RequestingTokenState) OnRegisterResponse(*Conn, *shared.RegisterResponse) error
func (*RequestingTokenState) OnTokenCheckResponse ¶
func (s *RequestingTokenState) OnTokenCheckResponse(*Conn, *shared.TokenCheckResponse) error
type WebSocketConn ¶
type WebSocketConn struct {
// contains filtered or unexported fields
}
WebSocketConn wraps a WebSocket connection with the message interface
func NewWebSocketConn ¶
func NewWebSocketConn(conn *websocket.Conn) *WebSocketConn
NewWebSocketConn wraps a WebSocket connection
func (*WebSocketConn) Close ¶
func (w *WebSocketConn) Close() error
Close closes the WebSocket connection with a normal close message
func (*WebSocketConn) LocalAddr ¶
func (w *WebSocketConn) LocalAddr() string
LocalAddr returns the local network address
func (*WebSocketConn) ReadMessage ¶
func (w *WebSocketConn) ReadMessage() (any, error)
ReadMessage reads a binary WebSocket message and decodes it
func (*WebSocketConn) RemoteAddr ¶
func (w *WebSocketConn) RemoteAddr() string
RemoteAddr returns the remote network address
func (*WebSocketConn) SetPingHandler ¶
func (w *WebSocketConn) SetPingHandler(h func(appData string) error)
SetPingHandler sets the handler for ping messages
func (*WebSocketConn) SetPongHandler ¶
func (w *WebSocketConn) SetPongHandler(h func(appData string) error)
SetPongHandler sets the handler for pong messages
func (*WebSocketConn) SetReadDeadline ¶
func (w *WebSocketConn) SetReadDeadline(t time.Time) error
SetReadDeadline sets the read deadline on the WebSocket connection
func (*WebSocketConn) UnderlyingConn ¶
func (w *WebSocketConn) UnderlyingConn() *websocket.Conn
UnderlyingConn returns the underlying WebSocket connection
func (*WebSocketConn) WriteMessage ¶
func (w *WebSocketConn) WriteMessage(msg any) error
WriteMessage encodes a message and writes it as a binary WebSocket message