subspacerelay

package module
v0.0.18 Latest Latest
Warning

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

Go to latest
Published: Jan 16, 2026 License: MIT Imports: 27 Imported by: 1

Documentation

Index

Constants

View Source
const (
	ModeCard          = "card"
	ModeReader        = "reader"
	ModeReaderDynamic = "reader-dynamic"
)
View Source
const CardShortcutLimit = 50
View Source
const (
	ContentTypeProto = "application/proto"
)

Variables

This section is empty.

Functions

func DeepLink(brokerURL string, mode string, discoveryPublicKey []byte) (string, error)

func GenerateECDHAESGCM added in v0.0.8

func GenerateECDHAESGCM(privKey *ecdh.PrivateKey, pubKey *ecdh.PublicKey) (_ cipher.AEAD, _ *ecdh.PublicKey, err error)

GenerateECDHAESGCM calculates a secret key between the provided keys and returns an AES128-GCM AEAD mode. If privKey is nil a randomly generated key is used The public key for our side is always returned.

func Must

func Must[T any](val T, err error) T

func NoopResequencer added in v0.0.7

func NoopResequencer(ctx context.Context, _ uint32, cb func(context.Context) error) (err error)

NoopResequencer is a dummy Resequencer that immediately calls the callback func ignoring the sequence.

func NotZero

func NotZero[T comparable](vals ...T) T

func RelayInfoAttrs added in v0.0.4

func RelayInfoAttrs(relayInfo *subspacerelaypb.RelayInfo) slog.Attr

Types

type CardController added in v0.0.9

type CardController struct {
	Relay *SubspaceRelay

	RelayInfo *subspacerelaypb.RelayInfo

	Resequencer Resequencer
	// contains filtered or unexported fields
}

func NewCardController added in v0.0.9

func NewCardController(ctx context.Context, serverURL, relayID string, connTypes []subspacerelaypb.ConnectionType, handler CardControllerHandler) (_ *CardController, err error)

func (*CardController) AddGeneralShortcut added in v0.0.9

func (c *CardController) AddGeneralShortcut(ctx context.Context, msg *subspacerelaypb.EmulationShortcut) (err error)

AddGeneralShortcut adds a non-rpc based general shortcut This is mostly useful for persistent shortcuts

func (*CardController) Close added in v0.0.9

func (c *CardController) Close() (err error)

func (*CardController) Disconnect added in v0.0.9

func (c *CardController) Disconnect(ctx context.Context) (err error)

func (*CardController) HandleMQTT added in v0.0.9

func (c *CardController) HandleMQTT(ctx context.Context, r *SubspaceRelay, p *paho.Publish) bool

func (*CardController) Reconnect added in v0.0.9

func (c *CardController) Reconnect(ctx context.Context, msg *subspacerelaypb.Reconnect) (err error)

type CardControllerHandler added in v0.0.9

type CardControllerHandler interface {
	rfid.Exchanger
	Disconnect(context.Context)
}

type CardRelay added in v0.0.7

type CardRelay[T io.Closer] struct {
	// contains filtered or unexported fields
}

func NewCardRelay added in v0.0.7

func NewCardRelay[T io.Closer](relay *SubspaceRelay, relayInfo *subspacerelaypb.RelayInfo, handler CardRelayHandler[T]) *CardRelay[T]

func (*CardRelay[T]) Connect added in v0.0.7

func (h *CardRelay[T]) Connect(msg *subspacerelaypb.Reconnect)

func (*CardRelay[T]) Disconnect added in v0.0.7

func (h *CardRelay[T]) Disconnect()

func (*CardRelay[T]) EnableDiscovery added in v0.0.12

func (h *CardRelay[T]) EnableDiscovery(plaintextDiscovery bool, pubKey *ecdh.PublicKey)

func (*CardRelay[T]) Exchange added in v0.0.7

func (h *CardRelay[T]) Exchange(ctx context.Context, capdu []byte) (rapdu []byte, err error)

func (*CardRelay[T]) HandleMQTT added in v0.0.7

func (h *CardRelay[T]) HandleMQTT(ctx context.Context, r *SubspaceRelay, p *paho.Publish) bool

func (*CardRelay[T]) Run added in v0.0.7

func (h *CardRelay[T]) Run(ctx context.Context) (err error)

func (*CardRelay[T]) WithRelayInfoLock added in v0.0.7

func (h *CardRelay[T]) WithRelayInfoLock(cb func(info *subspacerelaypb.RelayInfo))

type CardRelayHandler added in v0.0.7

type CardRelayHandler[T io.Closer] interface {
	Setup(ctx context.Context, msg *subspacerelaypb.Reconnect) (T, error)
	Run(ctx context.Context, state T) error
}

type Discovery added in v0.0.8

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

func NewDiscovery added in v0.0.8

func NewDiscovery(ctx context.Context, brokerURL string, opts ...DiscoveryOption) (_ *Discovery, err error)

func (*Discovery) Chan added in v0.0.8

func (d *Discovery) Chan() <-chan *subspacerelaypb.RelayDiscovery

func (*Discovery) Close added in v0.0.8

func (d *Discovery) Close() error

type DiscoveryOption added in v0.0.8

type DiscoveryOption func(*Discovery)

func WithDiscoveryAllowPlaintext added in v0.0.8

func WithDiscoveryAllowPlaintext() DiscoveryOption

func WithDiscoveryPayloadType added in v0.0.8

func WithDiscoveryPayloadType(payloadTypes ...subspacerelaypb.PayloadType) DiscoveryOption

func WithDiscoveryPrivateKey added in v0.0.8

func WithDiscoveryPrivateKey(key *ecdh.PrivateKey) DiscoveryOption

type Handler

type Handler interface {
	HandleMQTT(ctx context.Context, r *SubspaceRelay, p *paho.Publish) bool
}

type HandlerFunc added in v0.0.8

type HandlerFunc func(ctx context.Context, r *SubspaceRelay, p *paho.Publish) bool

func (HandlerFunc) HandleMQTT added in v0.0.8

func (f HandlerFunc) HandleMQTT(ctx context.Context, r *SubspaceRelay, p *paho.Publish) bool

type PCSC

type PCSC struct {
	Relay *SubspaceRelay

	RelayInfo *subspacerelaypb.RelayInfo
}

PCSC allows communicating with a remote PCSC-like connected reader

func NewPCSC

func NewPCSC(ctx context.Context, brokerURL, relayID string, connTypes ...subspacerelaypb.ConnectionType) (_ *PCSC, err error)

func (*PCSC) ATR

func (p *PCSC) ATR() ([]byte, error)

func (*PCSC) Close

func (p *PCSC) Close() (err error)

func (*PCSC) Control

func (p *PCSC) Control(ctx context.Context, code uint16, data []byte) ([]byte, error)

func (*PCSC) DeviceName

func (p *PCSC) DeviceName() string

func (*PCSC) Disconnect added in v0.0.10

func (p *PCSC) Disconnect(ctx context.Context) error

func (*PCSC) Exchange

func (p *PCSC) Exchange(ctx context.Context, capdu []byte) ([]byte, error)

func (*PCSC) HandleMQTT

func (p *PCSC) HandleMQTT(ctx context.Context, _ *SubspaceRelay, pub *paho.Publish) bool

func (*PCSC) Reconnect

func (p *PCSC) Reconnect(_ context.Context) error

type Resequencer added in v0.0.7

type Resequencer func(ctx context.Context, sequence uint32, cb func(context.Context) error) (err error)

func NewResequencer added in v0.0.7

func NewResequencer() Resequencer

NewResequencer will return a Resequencer that will reorder calls based on the provided sequence number before calling the callback func. Sequence numbers are expected to start at 0 and increase monotonically A received sequence number of 0 will reset the counter

type SubspaceRelay

type SubspaceRelay struct {
	RelayID string
	// contains filtered or unexported fields
}

func New

func New(ctx context.Context, brokerURL, relayID string) (_ *SubspaceRelay, err error)

New returns a new SubspaceRelay instance relayID must be "" if this end is the relay, otherwise if this is the controlling end provide the relayID of the other side which is randomly generated on startup and can be read from SubspaceRelay.RelayID

func (*SubspaceRelay) Close

func (r *SubspaceRelay) Close() error

func (*SubspaceRelay) Exchange

func (r *SubspaceRelay) Exchange(ctx context.Context, message *subspacerelaypb.Message) (_ *subspacerelaypb.Message, err error)

func (*SubspaceRelay) ExchangeMessageForPayload added in v0.0.4

func (r *SubspaceRelay) ExchangeMessageForPayload(ctx context.Context, message *subspacerelaypb.Message, expectedPayloadType subspacerelaypb.PayloadType) (_ *subspacerelaypb.Payload, err error)

func (*SubspaceRelay) ExchangeMulti added in v0.0.6

func (r *SubspaceRelay) ExchangeMulti(ctx context.Context, message *subspacerelaypb.Message, cb func(context.Context, *subspacerelaypb.Message) (final bool, err error)) (err error)

func (*SubspaceRelay) ExchangePayload

func (r *SubspaceRelay) ExchangePayload(ctx context.Context, payload *subspacerelaypb.Payload) (_ *subspacerelaypb.Payload, err error)

func (*SubspaceRelay) ExchangePayloadBytes

func (r *SubspaceRelay) ExchangePayloadBytes(ctx context.Context, payload *subspacerelaypb.Payload) (_ []byte, err error)

func (*SubspaceRelay) HandleDiscoveryRequest added in v0.0.8

func (r *SubspaceRelay) HandleDiscoveryRequest(ctx context.Context, replyProperties *paho.PublishProperties, relayDiscovery *subspacerelaypb.RelayDiscovery, plaintextSupported bool, pubKeyWhitelist *ecdh.PublicKey, msg *subspacerelaypb.RequestRelayDiscovery) (err error)

func (*SubspaceRelay) HandlePayload

func (r *SubspaceRelay) HandlePayload(ctx context.Context, properties *paho.PublishProperties, payload *subspacerelaypb.Payload,
	handler func(context.Context, *subspacerelaypb.Payload) ([]byte, error), supportedPayloadTypes ...subspacerelaypb.PayloadType) (err error)

func (*SubspaceRelay) Parse

func (r *SubspaceRelay) Parse(ctx context.Context, p *paho.Publish) (_ *subspacerelaypb.Message, err error)

func (*SubspaceRelay) ReadWriter

func (r *SubspaceRelay) ReadWriter(ctx context.Context, payloadType subspacerelaypb.PayloadType) (_ io.ReadWriter, err error)

func (*SubspaceRelay) RegisterHandler

func (r *SubspaceRelay) RegisterHandler(h Handler)

func (*SubspaceRelay) SendBroadcast added in v0.0.8

func (r *SubspaceRelay) SendBroadcast(ctx context.Context, replyProperties *paho.PublishProperties, message *subspacerelaypb.Message) (err error)

func (*SubspaceRelay) SendDiscoveryResponse added in v0.0.8

func (r *SubspaceRelay) SendDiscoveryResponse(ctx context.Context, replyProperties *paho.PublishProperties, relayDiscovery *subspacerelaypb.RelayDiscovery, pubKey *ecdh.PublicKey) (err error)

func (*SubspaceRelay) SendLog

func (r *SubspaceRelay) SendLog(ctx context.Context, log *subspacerelaypb.Log) (err error)

func (*SubspaceRelay) SendReply

func (r *SubspaceRelay) SendReply(ctx context.Context, properties *paho.PublishProperties, message *subspacerelaypb.Message) (err error)

func (*SubspaceRelay) SendUnsolicited

func (r *SubspaceRelay) SendUnsolicited(ctx context.Context, message *subspacerelaypb.Message) (err error)

Jump to

Keyboard shortcuts

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