import "github.com/katzenpost/client"
Package client provides a Katzenpost client library.
client.go events.go message.go queue.go send.go session.go timer_queue.go worker.go
ErrQueueEmpty is the error issued when the queue is empty.
ErrQueueFull is the error issued when the queue is full.
type Client struct {
// contains filtered or unexported fields
}
Client handles sending and receiving messages over the mix network
New creates a new Client with the provided configuration.
GetLogger returns a new logger with the given name.
NewSession creates and returns a new session or an error.
Shutdown cleanly shuts down a given Client instance.
Wait waits till the Client is terminated for any reason.
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 (e *ConnectionStatusEvent) String() string
String returns a string representation of the ConnectionStatusEvent.
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.
Event is the generic event sent over the event listener channel.
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 }
Message is a message reference which is used to match future received SURB replies.
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 (e *MessageIDGarbageCollected) String() string
String returns a string representation of a MessageIDGarbageCollected.
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 (e *MessageReplyEvent) String() string
String returns a string representation of the MessageReplyEvent.
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 (e *MessageSentEvent) String() string
String returns a string representation of a MessageSentEvent.
NewDocumentEvent is the new document event, signaling that we have received a new document from the PKI.
func (e *NewDocumentEvent) String() string
String returns a string representation of a NewDocumentEvent.
Queue is our in-memory queue implementation used as our egress FIFO queue for messages sent by the client.
Peek returns the next message ref from the queue without modifying the queue.
Pop pops the next message ref off the queue and returns nil upon success, otherwise an error is returned.
Push pushes the given message ref onto the queue and returns nil on success, otherwise an error is returned.
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( 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 (s *Session) BlockingSendUnreliableMessage(recipient, provider string, message []byte) ([]byte, error)
GetService returns a randomly selected service matching the specified service name
func (s *Session) SendUnreliableMessage(recipient, provider string, message []byte) (*[cConstants.MessageIDLength]byte, error)
SendUnreliableMessage asynchronously sends message without any automatic retransmissions.
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(nextQueue nqueue) *TimerQueue
NewTimerQueue intantiates a new TimerQueue and starts the worker routine
func (a *TimerQueue) Push(i Item)
Push adds a message to the TimerQueue
func (a *TimerQueue) Remove(i Item) error
Remove removes a Message from the TimerQueue
Path | Synopsis |
---|---|
config | Package config implements the configuration for the Katzenpost client. |
constants | |
internal/pkiclient | Package pkiclient implements a caching wrapper around core/pki.Client. |
internal/proxy | Package proxy implements the support for an upstream (outgoing) proxy. |
utils |
Package client imports 32 packages (graph) and is imported by 13 packages. Updated 2020-11-09. Refresh now. Tools for package owners.