node

package
v0.0.0-...-72953a6 Latest Latest
Warning

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

Go to latest
Published: Mar 8, 2026 License: AGPL-3.0 Imports: 27 Imported by: 0

Documentation

Index

Constants

View Source
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

func GetDefaultConfigPath() (string, error)

GetDefaultConfigPath returns the default config file path

func IsRetryableError

func IsRetryableError(err error) bool

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) Connect

func (s *CheckingTokenState) Connect(*Conn) error

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) Name

func (s *CheckingTokenState) Name() string

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) Connect

func (s *ClosedState) Connect(*Conn) error

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) Name

func (s *ClosedState) Name() string

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

type ConfigFile struct {
	Path   string
	Config *Config
}

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

func (*ConfigFile) Save

func (cf *ConfigFile) Save() error

Save persists the config to its path

func (*ConfigFile) Show

func (cf *ConfigFile) Show() error

Show displays the config

type Conn

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

Conn manages the connection to the server

func NewConn

func NewConn(configFile *ConfigFile) *Conn

NewConn creates a new node connection

func (*Conn) Close

func (c *Conn) Close() error

func (*Conn) CloseAllBridges

func (c *Conn) CloseAllBridges() error

func (*Conn) CloseBridge

func (c *Conn) CloseBridge(bridgeID string) error

func (*Conn) Connect

func (c *Conn) Connect() error

Connect establishes a connection to the server

func (*Conn) NodeID

func (c *Conn) NodeID() string

func (*Conn) Run

func (c *Conn) Run() error

Run connects to the server and blocks until disconnection

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) Name

func (s *DisconnectedState) Name() string

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) Close

func (r *Reconnector) Close()

Close signals the reconnector to stop

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) Connect

func (s *RegisteredState) Connect(*Conn) error

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) Name

func (s *RegisteredState) Name() string

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) Connect

func (s *RegisteringState) Connect(*Conn) error

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) Name

func (s *RegisteringState) Name() string

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) Connect

func (s *RequestingTokenState) Connect(*Conn) error

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) Name

func (s *RequestingTokenState) Name() string

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

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL