Documentation ¶
Overview ¶
Package client provides a Katzenpost client library.
Index ¶
- Variables
- func PKIBootstrap(ctx context.Context, c *Client, linkKey kem.PrivateKey) (pki.Client, *pki.Document, error)
- func SelectProvider(doc *pki.Document) (*pki.MixDescriptor, error)
- type Client
- type ConnectionStatusEvent
- type EgressQueue
- type Event
- type Item
- type Message
- type MessageIDGarbageCollected
- type MessageReplyEvent
- type MessageSentEvent
- type NewDocumentEvent
- type Queue
- type Session
- func (s *Session) BlockingSendReliableMessage(recipient, provider string, message []byte) ([]byte, error)
- func (s *Session) BlockingSendUnreliableMessage(recipient, provider string, message []byte) ([]byte, error)
- func (s *Session) CurrentDocument() *pki.Document
- func (s *Session) ForceFetchPKI()
- func (s *Session) GetService(serviceName string) (*utils.ServiceDescriptor, error)
- func (s *Session) GetServices(serviceName string) ([]*utils.ServiceDescriptor, error)
- func (s *Session) Push(i Item) error
- func (s *Session) SendReliableMessage(recipient, provider string, message []byte) (*[cConstants.MessageIDLength]byte, error)
- func (s *Session) SendUnreliableMessage(recipient, provider string, message []byte) (*[cConstants.MessageIDLength]byte, error)
- func (s *Session) Shutdown()
- func (s *Session) SphinxGeometry() *geo.Geometry
- func (s *Session) WaitForDocument(ctx context.Context) error
- type TimerQueue
Constants ¶
This section is empty.
Variables ¶
var ErrMessageNotSent = errors.New("failure sending message")
var ErrQueueEmpty = errors.New("queue is empty")
ErrQueueEmpty is the error issued when the queue is empty.
var ErrQueueFull = errors.New("queue is full")
ErrQueueFull is the error issued when the queue is full.
var ErrReplyTimeout = errors.New("failure waiting for reply, timeout reached")
Functions ¶
func PKIBootstrap ¶
func PKIBootstrap(ctx context.Context, c *Client, linkKey kem.PrivateKey) (pki.Client, *pki.Document, error)
PKIBootstrap returns a pkiClient and fetches a consensus.
func SelectProvider ¶
func SelectProvider(doc *pki.Document) (*pki.MixDescriptor, error)
SelectProvider returns a provider descriptor or error.
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client handles sending and receiving messages over the mix network
func (*Client) GetBackendLog ¶
func (*Client) NewTOFUSession ¶
NewTOFUSession creates and returns a new ephemeral session or an error.
type ConnectionStatusEvent ¶
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 ¶
func (e *ConnectionStatusEvent) String() string
String returns a string representation of the ConnectionStatusEvent.
type EgressQueue ¶
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 ¶
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 Message ¶
type Message struct { sync.Mutex // 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) SetPriority ¶
type MessageIDGarbageCollected ¶
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 ¶
func (e *MessageIDGarbageCollected) String() string
String returns a string representation of a MessageIDGarbageCollected.
type MessageReplyEvent ¶
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 ¶
func (e *MessageReplyEvent) String() string
String returns a string representation of the MessageReplyEvent.
type MessageSentEvent ¶
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 ¶
func (e *MessageSentEvent) String() string
String returns a string representation of a MessageSentEvent.
type NewDocumentEvent ¶
NewDocumentEvent is the new document event, signaling that we have received a new document from the PKI.
func (*NewDocumentEvent) String ¶
func (e *NewDocumentEvent) String() string
String returns a string representation of a NewDocumentEvent.
type Queue ¶
Queue is our in-memory queue implementation used as our egress FIFO queue for messages sent by the client.
type Session ¶
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 ¶
func NewSession( ctx context.Context, pkiClient pki.Client, cachedDoc *pki.Document, fatalErrCh chan error, logBackend *log.Backend, cfg *config.Config, linkKey kem.PrivateKey, provider *pki.MixDescriptor) (*Session, error)
New establishes a session with provider using key. This method will block until session is connected to the Provider.
func (*Session) BlockingSendReliableMessage ¶
func (s *Session) BlockingSendReliableMessage(recipient, provider string, message []byte) ([]byte, error)
BlockingSendReliableMessage sends a message with automatic message retransmission enabled
func (*Session) BlockingSendUnreliableMessage ¶
func (*Session) CurrentDocument ¶
func (*Session) ForceFetchPKI ¶
func (s *Session) ForceFetchPKI()
func (*Session) GetService ¶
func (s *Session) GetService(serviceName string) (*utils.ServiceDescriptor, error)
GetService returns a randomly selected service matching the specified service name
func (*Session) GetServices ¶
func (s *Session) GetServices(serviceName string) ([]*utils.ServiceDescriptor, error)
GetServices returns the services matching the specified service name
func (*Session) SendReliableMessage ¶
func (s *Session) SendReliableMessage(recipient, provider string, message []byte) (*[cConstants.MessageIDLength]byte, error)
SendReliableMessage asynchronously sends messages with automatic retransmissiosn.
func (*Session) SendUnreliableMessage ¶
func (s *Session) SendUnreliableMessage(recipient, provider string, message []byte) (*[cConstants.MessageIDLength]byte, error)
SendUnreliableMessage asynchronously sends message without any automatic retransmissions.
func (*Session) SphinxGeometry ¶
type TimerQueue ¶
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 ¶
func NewTimerQueue(nextQueue nqueue) *TimerQueue
NewTimerQueue intantiates a new TimerQueue and starts the worker routine
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
Package config implements the configuration for the Katzenpost client.
|
Package config implements the configuration for the Katzenpost client. |
internal
|
|
proxy
Package proxy implements the support for an upstream (outgoing) proxy.
|
Package proxy implements the support for an upstream (outgoing) proxy. |