Documentation
¶
Index ¶
- Constants
- func DeepLink(brokerURL string, mode string, discoveryPublicKey []byte) (string, error)
- func GenerateECDHAESGCM(privKey *ecdh.PrivateKey, pubKey *ecdh.PublicKey) (_ cipher.AEAD, _ *ecdh.PublicKey, err error)
- func Must[T any](val T, err error) T
- func NoopResequencer(ctx context.Context, _ uint32, cb func(context.Context) error) (err error)
- func NotZero[T comparable](vals ...T) T
- func RelayInfoAttrs(relayInfo *subspacerelaypb.RelayInfo) slog.Attr
- type CardController
- func (c *CardController) AddGeneralShortcut(ctx context.Context, msg *subspacerelaypb.EmulationShortcut) (err error)
- func (c *CardController) Close() (err error)
- func (c *CardController) Disconnect(ctx context.Context) (err error)
- func (c *CardController) HandleMQTT(ctx context.Context, r *SubspaceRelay, p *paho.Publish) bool
- func (c *CardController) Reconnect(ctx context.Context, msg *subspacerelaypb.Reconnect) (err error)
- type CardControllerHandler
- type CardRelay
- func (h *CardRelay[T]) Connect(msg *subspacerelaypb.Reconnect)
- func (h *CardRelay[T]) Disconnect()
- func (h *CardRelay[T]) EnableDiscovery(plaintextDiscovery bool, pubKey *ecdh.PublicKey)
- func (h *CardRelay[T]) Exchange(ctx context.Context, capdu []byte) (rapdu []byte, err error)
- func (h *CardRelay[T]) HandleMQTT(ctx context.Context, r *SubspaceRelay, p *paho.Publish) bool
- func (h *CardRelay[T]) Run(ctx context.Context) (err error)
- func (h *CardRelay[T]) WithRelayInfoLock(cb func(info *subspacerelaypb.RelayInfo))
- type CardRelayHandler
- type Discovery
- type DiscoveryOption
- type Handler
- type HandlerFunc
- type PCSC
- func (p *PCSC) ATR() ([]byte, error)
- func (p *PCSC) Close() (err error)
- func (p *PCSC) Control(ctx context.Context, code uint16, data []byte) ([]byte, error)
- func (p *PCSC) DeviceName() string
- func (p *PCSC) Disconnect(ctx context.Context) error
- func (p *PCSC) Exchange(ctx context.Context, capdu []byte) ([]byte, error)
- func (p *PCSC) HandleMQTT(ctx context.Context, _ *SubspaceRelay, pub *paho.Publish) bool
- func (p *PCSC) Reconnect(_ context.Context) error
- type Resequencer
- type SubspaceRelay
- func (r *SubspaceRelay) Close() error
- func (r *SubspaceRelay) Exchange(ctx context.Context, message *subspacerelaypb.Message) (_ *subspacerelaypb.Message, err error)
- func (r *SubspaceRelay) ExchangeMessageForPayload(ctx context.Context, message *subspacerelaypb.Message, ...) (_ *subspacerelaypb.Payload, err error)
- func (r *SubspaceRelay) ExchangeMulti(ctx context.Context, message *subspacerelaypb.Message, ...) (err error)
- func (r *SubspaceRelay) ExchangePayload(ctx context.Context, payload *subspacerelaypb.Payload) (_ *subspacerelaypb.Payload, err error)
- func (r *SubspaceRelay) ExchangePayloadBytes(ctx context.Context, payload *subspacerelaypb.Payload) (_ []byte, err error)
- func (r *SubspaceRelay) HandleDiscoveryRequest(ctx context.Context, replyProperties *paho.PublishProperties, ...) (err error)
- func (r *SubspaceRelay) HandlePayload(ctx context.Context, properties *paho.PublishProperties, ...) (err error)
- func (r *SubspaceRelay) Parse(ctx context.Context, p *paho.Publish) (_ *subspacerelaypb.Message, err error)
- func (r *SubspaceRelay) ReadWriter(ctx context.Context, payloadType subspacerelaypb.PayloadType) (_ io.ReadWriter, err error)
- func (r *SubspaceRelay) RegisterHandler(h Handler)
- func (r *SubspaceRelay) SendBroadcast(ctx context.Context, replyProperties *paho.PublishProperties, ...) (err error)
- func (r *SubspaceRelay) SendDiscoveryResponse(ctx context.Context, replyProperties *paho.PublishProperties, ...) (err error)
- func (r *SubspaceRelay) SendLog(ctx context.Context, log *subspacerelaypb.Log) (err error)
- func (r *SubspaceRelay) SendReply(ctx context.Context, properties *paho.PublishProperties, ...) (err error)
- func (r *SubspaceRelay) SendUnsolicited(ctx context.Context, message *subspacerelaypb.Message) (err error)
Constants ¶
const ( ModeCard = "card" ModeReader = "reader" ModeReaderDynamic = "reader-dynamic" )
const CardShortcutLimit = 50
const (
ContentTypeProto = "application/proto"
)
Variables ¶
This section is empty.
Functions ¶
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 NoopResequencer ¶ added in v0.0.7
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 CardRelay ¶ added in v0.0.7
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 (*CardRelay[T]) HandleMQTT ¶ added in v0.0.7
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 Discovery ¶ added in v0.0.8
type Discovery struct {
// contains filtered or unexported fields
}
func NewDiscovery ¶ added in v0.0.8
func (*Discovery) Chan ¶ added in v0.0.8
func (d *Discovery) Chan() <-chan *subspacerelaypb.RelayDiscovery
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 HandlerFunc ¶ added in v0.0.8
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) DeviceName ¶
func (*PCSC) HandleMQTT ¶
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)