client

package module
v0.0.35 Latest Latest
Warning

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

Go to latest
Published: Oct 29, 2023 License: AGPL-3.0 Imports: 33 Imported by: 18

README

migrated to monorepo https://github.com/katzenpost/katzenpost/issues/1

Documentation

Overview

Package client provides a Katzenpost client library.

Index

Constants

This section is empty.

Variables

View Source
var ErrMessageNotSent = errors.New("failure sending message")
View Source
var ErrQueueEmpty = errors.New("queue is empty")

ErrQueueEmpty is the error issued when the queue is empty.

View Source
var ErrQueueFull = errors.New("queue is full")

ErrQueueFull is the error issued when the queue is full.

View Source
var ErrReplyTimeout = errors.New("failure waiting for reply, timeout reached")

Functions

func AutoRegisterRandomClient added in v0.0.3

func AutoRegisterRandomClient(cfg *config.Config) (*config.Config, *ecdh.PrivateKey, error)

func NewRescheduler added in v0.0.27

func NewRescheduler(s *Session) *rescheduler

func RegisterClient

func RegisterClient(cfg *config.Config, linkKey *ecdh.PublicKey) error

Types

type Client

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

Client handles sending and receiving messages over the mix network

func New

func New(cfg *config.Config) (*Client, error)

New creates a new Client with the provided configuration.

func (*Client) GetBackendLog

func (c *Client) GetBackendLog() *log.Backend

func (*Client) GetLogger

func (c *Client) GetLogger(name string) *logging.Logger

GetLogger returns a new logger with the given name.

func (*Client) NewSession

func (c *Client) NewSession(linkKey *ecdh.PrivateKey) (*Session, error)

NewSession creates and returns a new session or an error.

func (*Client) Provider added in v0.0.3

func (c *Client) Provider() string

func (*Client) Shutdown

func (c *Client) Shutdown()

Shutdown cleanly shuts down a given Client instance.

func (*Client) Wait

func (c *Client) Wait()

Wait waits till the Client is terminated for any reason.

type ConnectionStatusEvent added in v0.0.3

type ConnectionStatusEvent struct {
	// IsConnected is true iff the account is connected to the provider.
	IsConnected bool

	// Err is the error encountered when connecting or by the connection if any.
	Err error
}

ConnectionStatusEvent is the event sent when an account's connection status changes.

func (*ConnectionStatusEvent) String added in v0.0.3

func (e *ConnectionStatusEvent) String() string

String returns a string representation of the ConnectionStatusEvent.

type EgressQueue added in v0.0.3

type EgressQueue interface {

	// Peek returns the next queue item without modifying the queue.
	Peek() (Item, error)

	// Pop pops the next item off the queue.
	Pop() (Item, error)

	// Push pushes the item onto the queue.
	Push(Item) error
}

EgressQueue is the egress queue interface.

type Event added in v0.0.3

type Event interface {
	// String returns a string representation of the Event.
	String() string
}

Event is the generic event sent over the event listener channel.

type Item added in v0.0.3

type Item interface {
	Priority() uint64
}

type Message added in v0.0.3

type Message struct {
	// ID is the message identifier
	ID *[cConstants.MessageIDLength]byte

	// Recipient is the message recipient
	Recipient string

	// Provider is the recipient Provider
	Provider string

	// Payload is the message payload
	Payload []byte

	// SentAt contains the time the message was sent.
	SentAt time.Time

	// ReplyETA is the expected round trip time to receive a response.
	ReplyETA time.Duration

	// IsBlocking indicates whether or not the client is blocking on the
	// sending of the query and the receiving of it's reply.
	IsBlocking bool

	// SURBID is the SURB identifier.
	SURBID *[sConstants.SURBIDLength]byte

	// Key is the SURB decryption keys
	Key []byte

	// Reply is the SURB reply
	Reply []byte

	// WithSURB specified if a SURB should be bundled with the forward payload.
	WithSURB bool

	// Specifies if this message is a decoy.
	IsDecoy bool

	// Priority controls the dwell time in the current AQM.
	QueuePriority uint64

	// Reliable indicate whether automatic retransmissions should be used.
	Reliable bool

	// Retransmissions counts the number of times the message has been retransmitted.
	Retransmissions uint32
}

Message is a message reference which is used to match future received SURB replies.

func (*Message) Priority added in v0.0.3

func (m *Message) Priority() uint64

type MessageIDGarbageCollected added in v0.0.3

type MessageIDGarbageCollected struct {
	// MessageID is the local unique identifier for the message.
	MessageID *[cConstants.MessageIDLength]byte
}

MessageIDGarbageCollected is the event used to signal when a given message ID has been garbage collected.

func (*MessageIDGarbageCollected) String added in v0.0.3

func (e *MessageIDGarbageCollected) String() string

String returns a string representation of a MessageIDGarbageCollected.

type MessageReplyEvent added in v0.0.3

type MessageReplyEvent struct {
	// MessageID is the unique identifier for the request associated with the
	// reply.
	MessageID *[cConstants.MessageIDLength]byte

	// Payload is the reply payload if any.
	Payload []byte

	// Err is the error encountered when servicing the request if any.
	Err error
}

MessageReplyEvent is the event sent when a new message is received.

func (*MessageReplyEvent) String added in v0.0.3

func (e *MessageReplyEvent) String() string

String returns a string representation of the MessageReplyEvent.

type MessageSentEvent added in v0.0.3

type MessageSentEvent struct {
	// MessageID is the local unique identifier for the message, generated
	// when the message was enqueued.
	MessageID *[cConstants.MessageIDLength]byte

	// SentAt contains the time the message was sent.
	SentAt time.Time

	// ReplyETA is the expected round trip time to receive a response.
	ReplyETA time.Duration

	// Err is the error encountered when sending the message if any.
	Err error
}

MessageSentEvent is the event sent when a message has been fully transmitted.

func (*MessageSentEvent) String added in v0.0.3

func (e *MessageSentEvent) String() string

String returns a string representation of a MessageSentEvent.

type NewDocumentEvent added in v0.0.3

type NewDocumentEvent struct {
	Document *pki.Document
}

NewDocumentEvent is the new document event, signaling that we have received a new document from the PKI.

func (*NewDocumentEvent) String added in v0.0.3

func (e *NewDocumentEvent) String() string

String returns a string representation of a NewDocumentEvent.

type Queue added in v0.0.3

type Queue struct {
	sync.Mutex
	// contains filtered or unexported fields
}

Queue is our in-memory queue implementation used as our egress FIFO queue for messages sent by the client.

func (*Queue) Peek added in v0.0.3

func (q *Queue) Peek() (Item, error)

Peek returns the next message ref from the queue without modifying the queue.

func (*Queue) Pop added in v0.0.3

func (q *Queue) Pop() (Item, error)

Pop pops the next message ref off the queue and returns nil upon success, otherwise an error is returned.

func (*Queue) Push added in v0.0.3

func (q *Queue) Push(e Item) error

Push pushes the given message ref onto the queue and returns nil on success, otherwise an error is returned.

type Session added in v0.0.3

type Session struct {
	worker.Worker

	EventSink chan Event
	// contains filtered or unexported fields
}

Session is the struct type that keeps state for a given session.

func NewSession added in v0.0.3

func NewSession(
	ctx context.Context,
	fatalErrCh chan error,
	logBackend *log.Backend,
	cfg *config.Config,
	linkKey *ecdh.PrivateKey) (*Session, error)

New establishes a session with provider using key. This method will block until session is connected to the Provider.

func (*Session) BlockingSendReliableMessage added in v0.0.27

func (s *Session) BlockingSendReliableMessage(recipient, provider string, message []byte) ([]byte, error)

BlockingSendReliableMessage sends a message with automatic message retransmission enabled

func (*Session) BlockingSendUnreliableMessage added in v0.0.3

func (s *Session) BlockingSendUnreliableMessage(recipient, provider string, message []byte) ([]byte, error)

func (*Session) CurrentDocument added in v0.0.3

func (s *Session) CurrentDocument() *pki.Document

func (*Session) GetPandaConfig added in v0.0.3

func (s *Session) GetPandaConfig() *config.Panda

func (*Session) GetReunionConfig added in v0.0.8

func (s *Session) GetReunionConfig() *config.Reunion

func (*Session) GetService added in v0.0.3

func (s *Session) GetService(serviceName string) (*utils.ServiceDescriptor, error)

GetService returns a randomly selected service matching the specified service name

func (*Session) SendReliableMessage added in v0.0.27

func (s *Session) SendReliableMessage(recipient, provider string, message []byte) (*[cConstants.MessageIDLength]byte, error)

SendReliableMessage asynchronously sends messages with automatic retransmissiosn.

func (*Session) SendUnreliableMessage added in v0.0.3

func (s *Session) SendUnreliableMessage(recipient, provider string, message []byte) (*[cConstants.MessageIDLength]byte, error)

SendUnreliableMessage asynchronously sends message without any automatic retransmissions.

func (*Session) Shutdown added in v0.0.3

func (s *Session) Shutdown()

type TimerQueue added in v0.0.3

type TimerQueue struct {
	sync.Mutex
	sync.Cond
	worker.Worker
	// contains filtered or unexported fields
}

TimerQueue is a queue that delays messages before forwarding to another queue

func NewTimerQueue added in v0.0.3

func NewTimerQueue(nextQueue nqueue) *TimerQueue

NewTimerQueue intantiates a new TimerQueue and starts the worker routine

func (*TimerQueue) Push added in v0.0.3

func (a *TimerQueue) Push(i Item)

Push adds a message to the TimerQueue

func (*TimerQueue) Remove added in v0.0.3

func (a *TimerQueue) Remove(i Item) error

Remove removes a Message from the TimerQueue

Directories

Path Synopsis
Package config implements the configuration for the Katzenpost client.
Package config implements the configuration for the Katzenpost client.
internal
pkiclient
Package pkiclient implements a caching wrapper around core/pki.Client.
Package pkiclient implements a caching wrapper around core/pki.Client.
proxy
Package proxy implements the support for an upstream (outgoing) proxy.
Package proxy implements the support for an upstream (outgoing) proxy.

Jump to

Keyboard shortcuts

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